Simple unit test is bash file

Consider the following 3 files:

1. shellTestFramework.sh


#!/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


#!/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


#!/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

Multithreading in Java using ThreadPoolExecutor

ThreadWorker is your custom class.

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);
}

Getting the caller method details using Java

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()+"()";="" }="" null;="" <="" code=""></stelements.length;>

Compare File Permission Recussively on Linux Directories

Scan

#!/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 );
}

MSBuild common errors and how to fix them

Building with MSBuild produced an error or warning

Run ms build with (d)etaild verbose mode

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


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












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



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

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