Simple unit test is bash file

Consider the following 3 files:

1. shellTestFramework.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/bin/bash
# Copyright (c) Ronald Pringadi

# Before each Test
function setUpTest(){
    #"Please overwrite this function on your unit test. Something that need to be done before each test"
    return 0;
}

function tearDownTest(){
    #"Please overwrite this function on your unit test. Something that need to be done after each test"
    return 0;
}


# Helping assertion
function assertEqual(){
    if [ "$1" == "$2" ]; then
        echo "`caller 0`. PASS"
    else
        echo "`caller 0`. FAIL. $1!=$2"
    fi
}

# Helping assertion
function assertNotEqual(){
    if [ "$1" != "$2" ]; then
        echo "`caller 0`. PASS"
    else
        echo "`caller 0`. FAIL. $1==$2"
    fi
}

# To run all test.
# Will run 'setUpTest()' before each test.
# Will run 'tearDownTest()' after each test.
function runAllTest(){
    array=($(compgen -A function |grep -i test))
    for i in "${array[@]}"
    do
       if [ "$i" != "setUpTest" ] && [ "$i" != "runAllTest" ] && [ "$i" != "tearDownTest" ]; then
        echo "`setUpTest`"
        echo "`$i`"
        echo "`tearDownTest`"
       fi
    done
}

2. osdetector.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/bin/bash
# Copyright (c) Ronald Pringadi

# Returns String ("ubuntu", "censtos", "redhat", "unknown")
function detectAnyOS(){
    OS="unknown"
   
    DETECT="ubuntu"
    if [ `detectSpecificOS "$DETECT"` -eq 1 ] ; then
        echo $DETECT
        return 0
    fi
   
    DETECT="centos"
    if [ `detectSpecificOS "$DETECT"` -eq 1 ] ; then
        echo $DETECT
        return 0
    fi
   
    DETECT="Red Hat"
    if [ `detectSpecificOS "$DETECT"` -eq 1 ] ; then
        echo "redhat"
        return 0
    fi
   
    DETECT="RHEL"
    if [ `detectSpecificOS "$DETECT"` -eq 1 ] ; then
        echo "redhat"
        return 0
    fi
}

# Input String ("ubuntu", "Centos", "RedHat")
# Returns String "1"=found, "0"=not found
function detectSpecificOS(){
    DETECT=$1
    IS_FOUND=`cat /etc/*-release |grep -i "$DETECT"|wc -l`
    if [ $IS_FOUND -gt 0 ]; then
        echo "1"
    else
        echo "0"
    fi
}

# Returns String ("6", "5.5", "4")
function detectOSVersion(){
    # Works for ubuntu
    VERSION=`cat /etc/*-release |grep 'DISTRIB_RELEASE='|grep -o '[0-9|.]\+'|head -1`
    if [ "$VERSION" != "" ]; then
        echo $VERSION
        return 0
    fi
   
    # Works for Centos
    VERSION=`cat /etc/*-release |grep ' release '|grep -o '[0-9|.]\+'|head -1`
    if [ "$VERSION" != "" ]; then
        echo $VERSION
        return 0
    fi
   
    # Final resort
    VERSION=`cat /etc/*-release |grep -i 'ubuntu\|red hat\|centos'| grep -o '\ [0-9|.]\+'|head -1`
    if [ "$VERSION" != "" ]; then
        echo $VERSION
        return 0
    fi
   
}


# Returns String ("6", "5", "4")
function detectOSMajorVersion(){
    VERSION=`detectOSVersion`
    MAJOR_VERSION=`echo "$VERSION" |grep -o '[0-9]\+'|head -1`
    echo "$MAJOR_VERSION"
}

# Input String OS  ("ubuntu", "Centos", "RedHat")
# Input String OSVersion name
# Returns String "1"=supported, "0"=not supported
function isOSSupported(){
    SUPPORTED="0"
    OS=`echo "$1"| tr '[:upper:]' '[:lower:]'`
    VERSION="$2"
    MAJOR_VERSION=`echo "$VERSION" |grep -o '[0-9]\+'|head -1`
    if [ "$OS" == "ubuntu" ]; then
        if [ "$MAJOR_VERSION" == "12" ] || [ "$MAJOR_VERSION" == "13" ] || [ "$MAJOR_VERSION" == "14" ]; then
            SUPPORTED="1"
        fi
    fi
    if [ "$OS" == "red hat" ] || [ "$OS" == "redhat" ] || [ "$OS" == "centos" ]; then
        if [ "$MAJOR_VERSION" == "6" ]; then
            SUPPORTED="1"
        fi
    fi
    echo $SUPPORTED
}

3. osdetector.test.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/bin/bash
# Copyright (c) Ronald Pringadi
my_dir="$(dirname "$0")"
source "$my_dir/osdetector.sh"
source "$my_dir/shellTestFramework.sh"


# Before each Test
function setupTest(){
    RELEASE_CONTENT="Ubuntu 14.04.3 LTS"
    echo "$RELEASE_CONTENT">/etc/test-release
}

function adetectSpecificOSTest(){
    DETECT="Ubuntu"
    RESULT=`detectSpecificOS $DETECT`
    assertEqual "$RESULT" "1"
   
    DETECT="Centos"
    RESULT=`detectSpecificOS $DETECT`
    assertEqual "$RESULT" "0"
}


function detectAnyOSTest(){
    RESULT=`detectAnyOS`
    assertEqual "$RESULT" "ubuntu"
    assertNotEqual "$RESULT" "centos"
}

function detectOSAndOsVersionTest(){   
    RELEASE_CONTENT="Ubuntu 14.04.3 LTS"
    echo "$RELEASE_CONTENT" > /etc/test-release
    RESULT=`detectOSVersion`
    assertEqual "$RESULT" "14.04.3"
    RESULT=`detectOSMajorVersion`
    assertEqual "$RESULT" "14"
    RESULT=`detectAnyOS`
    assertEqual "$RESULT" "ubuntu"
   
    RELEASE_CONTENT="CentOS release 6.6 (Final)"
    echo "$RELEASE_CONTENT" > /etc/test-release
    RESULT=`detectOSVersion`
    assertEqual "$RESULT" "6.6"
    RESULT=`detectOSMajorVersion`
    assertEqual "$RESULT" "6"
    RESULT=`detectAnyOS`
    assertEqual "$RESULT" "centos"
   
    RELEASE_CONTENT="CentOS Linux release 7.1.1503 (Core)"
    echo "$RELEASE_CONTENT" > /etc/test-release
    RESULT=`detectOSVersion`
    assertEqual "$RESULT" "7.1.1503"
    RESULT=`detectOSMajorVersion`
    assertEqual "$RESULT" "7"
    RESULT=`detectAnyOS`
    assertEqual "$RESULT" "centos"
   
    RELEASE_CONTENT="Red Hat Enterprise Linux Server release 6.3 (Santiago)"
    echo "$RELEASE_CONTENT" > /etc/test-release
    echo "$RELEASE_CONTENT" >> /etc/test-release
    RESULT=`detectOSVersion`
    assertEqual "$RESULT" "6.3"
    RESULT=`detectOSMajorVersion`
    assertEqual "$RESULT" "6"
    RESULT=`detectAnyOS`
    assertEqual "$RESULT" "redhat"
}

function isOSSupportedTest(){  
   
    RESULT=`isOSSupported "ubuntu" "11"`
    assertEqual "$RESULT" "0"
   
    RESULT=`isOSSupported "ubuntu" "12"`
    assertEqual "$RESULT" "1"
   
    RESULT=`isOSSupported "ubuntu" "13"`
    assertEqual "$RESULT" "1"
   
    RESULT=`isOSSupported "ubuntu" "14"`
    assertEqual "$RESULT" "1"
   
    RESULT=`isOSSupported "ubuntu" "15"`
    assertEqual "$RESULT" "0"
       
    RESULT=`isOSSupported "redhat" "5"`
    assertEqual "$RESULT" "0"
   
    RESULT=`isOSSupported "redhat" "6"`
    assertEqual "$RESULT" "1"
   
    RESULT=`isOSSupported "redhat" "7"`
    assertEqual "$RESULT" "0"
   
    RESULT=`isOSSupported "red hat" "5"`
    assertEqual "$RESULT" "0"
   
    RESULT=`isOSSupported "red hat" "6"`
    assertEqual "$RESULT" "1"
   
    RESULT=`isOSSupported "red hat" "7"`
    assertEqual "$RESULT" "0"
       
    RESULT=`isOSSupported "centos" "5"`
    assertEqual "$RESULT" "0"
   
    RESULT=`isOSSupported "centos" "6"`
    assertEqual "$RESULT" "1"
   
    RESULT=`isOSSupported "centos" "7"`
    assertEqual "$RESULT" "0"
   
    RESULT=`isOSSupported "Fedora" "50"`
    assertEqual "$RESULT" "0"
   
}


runAllTest
Posted in Bash | Leave a comment

Multithreading in Java using ThreadPoolExecutor

ThreadWorker is your custom class.

1
2
3
4
5
6
7
8
9
try {
ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(MAX_THREAD_SIZE);
for (int i = 1; i Random randomGenerator = new Random();
executor.submit(new ThreadWorker("worker" + i, randomGenerator.nextInt(10)));
LOG.info(i);
}
} catch (Exception e) {
LOG.error("Hmm something is not right.", e);
}
Posted in Uncategorized | Leave a comment

Getting the caller method details using Java

1
2
3
4
5
6
7
8
9
10
 public static String getCallerClassName() {
        StackTraceElement[] stElements = Thread.currentThread().getStackTrace();
        for (int i=1; i<stElements.length; i++) {
            StackTraceElement ste = stElements[i];
            if (!ste.getClassName().equals(YOUR_CURRENTCLASS.class.getName()) && ste.getClassName().indexOf("java.lang.Thread")!=0) {
                return ste.getClassName()+"."+ ste.getMethodName()+"()";
            }
        }
        return null;
     }
Posted in Uncategorized | Leave a comment

Compare File Permission Recussively on Linux Directories

Scan

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl

use File::Find;

my $directory1 = '/root/rpmbuild/RPMSX';
my $directory2 = '/root/rpmbuild/RPMSX.bak';

find(\&hashfiles, $directory1);

sub hashfiles {
  my $file1 = $File::Find::name;
  (my $file2 = $file1) =~ s/^$directory1/$directory2/;
        return(0) if (! -f $file2) ;
  my $mode1 = (stat($file1))[2] ;
  my $mode2 = (stat($file2))[2] ;

  my $uid1 = (stat($file1))[4] ;
  my $uid2 = (stat($file2))[4] ;

  print "Permissions for $file1 and $file2 are not the same\n" if ( $mode1 != $mode2 );
  print "Ownership for $file1 and $file2 are not the same\n" if ( $uid1 != $uid2 );
}
Posted in Uncategorized | Leave a comment

Linux find files and total their size

1
find ./ -type f -newerct "1 May 2015" ! -newerct "1 Jul 2015" -print0 | du --files0-from=- -hc| tail -n1
Posted in Bash, Linux | Leave a comment

Wireshark filters

Filter by ip dst or source using wildcard on the last 3 digits:

(ip.dst == 192.168.0.0/24) || (ip.src == 192.168.0.0/24)

Posted in Uncategorized | Leave a comment

MSBuild common errors and how to fix them

Building with MSBuild produced an error or warning

Run ms build with (d)etaild verbose mode

1
msbuild someproject.csproj /t:Clean;Build;Transfer /p:OutputPath=bin\autobuild;BuildNumber=-1;Configuration=Debug /v:d >build.txt

Open and find the build.txt and find the MSBXXXX error/warning

1
2
Consider app.config remapping of assembly "DotNetOpenAuth.AspNet, Culture=neutral, PublicKeyToken=2780ccd10d57b246" from Version "4.0.0.0" [] to Version "4.1.0.0" [C:\somedir\bin\DotNetOpenAuth.AspNet.dll] to solve conflict and get rid of warning.
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3247: Found conflicts between different versions of the same dependent assembly.

If not already exist add an “App.config” file with the following content

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" />
                <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

Also change your .csproject to include the App.config file

1
2
3
  <ItemGroup>
    <None Include="App.config" />
  </ItemGroup>
Posted in C# | Tagged | Leave a comment

Allowing a linux/unix user all sudo access without password

/etc/sudoers

yourusername ALL=(ALL) NOPASSWD:ALL

Posted in Linux | Tagged , | Leave a comment

Solaris Notes

Extracting a solaris package without installing it.

#http://serverfault.com/questions/287469/extract-files-out-of-solaris-pkg-file-without-installing
pkgtrans filename.pkg /home/user/temporary_package_prefix

Posted in Operating System | Leave a comment

Find with xargs

Search all files under current directory, look for xml node ‘‘, copy and print that node. Send the output to a file.

find . |xargs -n1 xmlstarlet sel -t -c “//processorInfo[@ruleType=’store’]” 2>/dev/null > /cygdrive/b/allstore.txt

Posted in Linux | Leave a comment