github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/tools/lxdclient/instance_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 // +build go1.3 5 6 package lxdclient_test 7 8 import ( 9 "fmt" 10 "math" 11 "time" 12 13 jc "github.com/juju/testing/checkers" 14 lxdshared "github.com/lxc/lxd/shared" 15 gc "gopkg.in/check.v1" 16 17 jujutesting "github.com/juju/juju/testing" 18 "github.com/juju/juju/tools/lxdclient" 19 ) 20 21 type instanceSuite struct { 22 jujutesting.BaseSuite 23 } 24 25 var _ = gc.Suite(&instanceSuite{}) 26 27 var templateContainerInfo = lxdshared.ContainerInfo{ 28 Architecture: "x86_64", 29 Config: map[string]string{ 30 "limits.cpu": "2", 31 "limits.memory": "256MB", 32 "user.something": "something value", 33 }, 34 CreationDate: time.Now(), 35 Devices: nil, 36 Ephemeral: false, 37 ExpandedConfig: nil, 38 ExpandedDevices: nil, 39 Name: "container-name", 40 Profiles: []string{""}, 41 Status: lxdshared.Starting.String(), 42 StatusCode: lxdshared.Starting, 43 } 44 45 func (s *instanceSuite) TestNewInstanceSummaryTemplate(c *gc.C) { 46 archStr, err := lxdshared.ArchitectureName(lxdshared.ARCH_64BIT_INTEL_X86) 47 c.Assert(err, jc.ErrorIsNil) 48 c.Check(templateContainerInfo.Architecture, gc.Equals, archStr) 49 summary := lxdclient.NewInstanceSummary(&templateContainerInfo) 50 c.Check(summary.Name, gc.Equals, "container-name") 51 c.Check(summary.Status, gc.Equals, lxdclient.StatusStarting) 52 c.Check(summary.Hardware.Architecture, gc.Equals, "amd64") 53 c.Check(summary.Hardware.NumCores, gc.Equals, uint(2)) 54 c.Check(summary.Hardware.MemoryMB, gc.Equals, uint(256)) 55 // NotImplemented yet 56 c.Check(summary.Hardware.RootDiskMB, gc.Equals, uint64(0)) 57 c.Check(summary.Metadata, gc.DeepEquals, map[string]string{"something": "something value"}) 58 } 59 60 func infoWithMemory(mem string) *lxdshared.ContainerInfo { 61 info := templateContainerInfo 62 info.Config = map[string]string{ 63 "limits.memory": mem, 64 } 65 return &info 66 } 67 68 func (s *instanceSuite) TestNewInstanceSummaryMemory(c *gc.C) { 69 // No suffix 70 summary := lxdclient.NewInstanceSummary(infoWithMemory("128")) 71 c.Check(summary.Hardware.MemoryMB, gc.Equals, uint(0)) 72 // Invalid integer 73 summary = lxdclient.NewInstanceSummary(infoWithMemory("blah")) 74 c.Check(summary.Hardware.MemoryMB, gc.Equals, uint(0)) 75 // Too big to fit in uint 76 tooBig := fmt.Sprintf("%vMB", uint64(math.MaxUint32)+1) 77 summary = lxdclient.NewInstanceSummary(infoWithMemory(tooBig)) 78 c.Check(summary.Hardware.MemoryMB, gc.Equals, uint(math.MaxUint32)) 79 // Just big enough 80 justEnough := fmt.Sprintf("%vMB", uint(math.MaxUint32)-1) 81 summary = lxdclient.NewInstanceSummary(infoWithMemory(justEnough)) 82 c.Check(summary.Hardware.MemoryMB, gc.Equals, uint(math.MaxUint32-1)) 83 } 84 85 func infoWithArchitecture(arch int) *lxdshared.ContainerInfo { 86 info := templateContainerInfo 87 info.Architecture, _ = lxdshared.ArchitectureName(arch) 88 return &info 89 } 90 91 func (s *instanceSuite) TestNewInstanceSummaryArchitectures(c *gc.C) { 92 summary := lxdclient.NewInstanceSummary(infoWithArchitecture(lxdshared.ARCH_32BIT_INTEL_X86)) 93 c.Check(summary.Hardware.Architecture, gc.Equals, "i386") 94 summary = lxdclient.NewInstanceSummary(infoWithArchitecture(lxdshared.ARCH_64BIT_INTEL_X86)) 95 c.Check(summary.Hardware.Architecture, gc.Equals, "amd64") 96 summary = lxdclient.NewInstanceSummary(infoWithArchitecture(lxdshared.ARCH_64BIT_POWERPC_LITTLE_ENDIAN)) 97 c.Check(summary.Hardware.Architecture, gc.Equals, "ppc64el") 98 info := templateContainerInfo 99 info.Architecture = "unknown" 100 summary = lxdclient.NewInstanceSummary(&info) 101 c.Check(summary.Hardware.Architecture, gc.Equals, "unknown") 102 }