github.com/xuyutom/docker@v1.6.0/pkg/units/size_test.go (about)

     1  package units
     2  
     3  import (
     4  	"reflect"
     5  	"runtime"
     6  	"strings"
     7  	"testing"
     8  )
     9  
    10  func TestBytesSize(t *testing.T) {
    11  	assertEquals(t, "1 KiB", BytesSize(1024))
    12  	assertEquals(t, "1 MiB", BytesSize(1024*1024))
    13  	assertEquals(t, "1 MiB", BytesSize(1048576))
    14  	assertEquals(t, "2 MiB", BytesSize(2*MiB))
    15  	assertEquals(t, "3.42 GiB", BytesSize(3.42*GiB))
    16  	assertEquals(t, "5.372 TiB", BytesSize(5.372*TiB))
    17  	assertEquals(t, "2.22 PiB", BytesSize(2.22*PiB))
    18  }
    19  
    20  func TestHumanSize(t *testing.T) {
    21  	assertEquals(t, "1 kB", HumanSize(1000))
    22  	assertEquals(t, "1.024 kB", HumanSize(1024))
    23  	assertEquals(t, "1 MB", HumanSize(1000000))
    24  	assertEquals(t, "1.049 MB", HumanSize(1048576))
    25  	assertEquals(t, "2 MB", HumanSize(2*MB))
    26  	assertEquals(t, "3.42 GB", HumanSize(float64(3.42*GB)))
    27  	assertEquals(t, "5.372 TB", HumanSize(float64(5.372*TB)))
    28  	assertEquals(t, "2.22 PB", HumanSize(float64(2.22*PB)))
    29  }
    30  
    31  func TestFromHumanSize(t *testing.T) {
    32  	assertSuccessEquals(t, 32, FromHumanSize, "32")
    33  	assertSuccessEquals(t, 32, FromHumanSize, "32b")
    34  	assertSuccessEquals(t, 32, FromHumanSize, "32B")
    35  	assertSuccessEquals(t, 32*KB, FromHumanSize, "32k")
    36  	assertSuccessEquals(t, 32*KB, FromHumanSize, "32K")
    37  	assertSuccessEquals(t, 32*KB, FromHumanSize, "32kb")
    38  	assertSuccessEquals(t, 32*KB, FromHumanSize, "32Kb")
    39  	assertSuccessEquals(t, 32*MB, FromHumanSize, "32Mb")
    40  	assertSuccessEquals(t, 32*GB, FromHumanSize, "32Gb")
    41  	assertSuccessEquals(t, 32*TB, FromHumanSize, "32Tb")
    42  	assertSuccessEquals(t, 32*PB, FromHumanSize, "32Pb")
    43  
    44  	assertError(t, FromHumanSize, "")
    45  	assertError(t, FromHumanSize, "hello")
    46  	assertError(t, FromHumanSize, "-32")
    47  	assertError(t, FromHumanSize, "32.3")
    48  	assertError(t, FromHumanSize, " 32 ")
    49  	assertError(t, FromHumanSize, "32.3Kb")
    50  	assertError(t, FromHumanSize, "32 mb")
    51  	assertError(t, FromHumanSize, "32m b")
    52  	assertError(t, FromHumanSize, "32bm")
    53  }
    54  
    55  func TestRAMInBytes(t *testing.T) {
    56  	assertSuccessEquals(t, 32, RAMInBytes, "32")
    57  	assertSuccessEquals(t, 32, RAMInBytes, "32b")
    58  	assertSuccessEquals(t, 32, RAMInBytes, "32B")
    59  	assertSuccessEquals(t, 32*KiB, RAMInBytes, "32k")
    60  	assertSuccessEquals(t, 32*KiB, RAMInBytes, "32K")
    61  	assertSuccessEquals(t, 32*KiB, RAMInBytes, "32kb")
    62  	assertSuccessEquals(t, 32*KiB, RAMInBytes, "32Kb")
    63  	assertSuccessEquals(t, 32*MiB, RAMInBytes, "32Mb")
    64  	assertSuccessEquals(t, 32*GiB, RAMInBytes, "32Gb")
    65  	assertSuccessEquals(t, 32*TiB, RAMInBytes, "32Tb")
    66  	assertSuccessEquals(t, 32*PiB, RAMInBytes, "32Pb")
    67  	assertSuccessEquals(t, 32*PiB, RAMInBytes, "32PB")
    68  	assertSuccessEquals(t, 32*PiB, RAMInBytes, "32P")
    69  
    70  	assertError(t, RAMInBytes, "")
    71  	assertError(t, RAMInBytes, "hello")
    72  	assertError(t, RAMInBytes, "-32")
    73  	assertError(t, RAMInBytes, "32.3")
    74  	assertError(t, RAMInBytes, " 32 ")
    75  	assertError(t, RAMInBytes, "32.3Kb")
    76  	assertError(t, RAMInBytes, "32 mb")
    77  	assertError(t, RAMInBytes, "32m b")
    78  	assertError(t, RAMInBytes, "32bm")
    79  }
    80  
    81  func assertEquals(t *testing.T, expected, actual interface{}) {
    82  	if expected != actual {
    83  		t.Errorf("Expected '%v' but got '%v'", expected, actual)
    84  	}
    85  }
    86  
    87  // func that maps to the parse function signatures as testing abstraction
    88  type parseFn func(string) (int64, error)
    89  
    90  // Define 'String()' for pretty-print
    91  func (fn parseFn) String() string {
    92  	fnName := runtime.FuncForPC(reflect.ValueOf(fn).Pointer()).Name()
    93  	return fnName[strings.LastIndex(fnName, ".")+1:]
    94  }
    95  
    96  func assertSuccessEquals(t *testing.T, expected int64, fn parseFn, arg string) {
    97  	res, err := fn(arg)
    98  	if err != nil || res != expected {
    99  		t.Errorf("%s(\"%s\") -> expected '%d' but got '%d' with error '%v'", fn, arg, expected, res, err)
   100  	}
   101  }
   102  
   103  func assertError(t *testing.T, fn parseFn, arg string) {
   104  	res, err := fn(arg)
   105  	if err == nil && res != -1 {
   106  		t.Errorf("%s(\"%s\") -> expected error but got '%d'", fn, arg, res)
   107  	}
   108  }