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  }