Author: ronald

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

  • Linux find files and total their size


    find ./ -type f -newerct "1 May 2015" ! -newerct "1 Jul 2015" -print0 | du --files0-from=- -hc| tail -n1

  • 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)

  • 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



  • Allowing a linux/unix user all sudo access without password

    /etc/sudoers

    yourusername ALL=(ALL) NOPASSWD:ALL

  • 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