github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/apiserver/client/instanceconfig_test.go (about)

     1  // Copyright 2012, 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package client_test
     5  
     6  import (
     7  	"fmt"
     8  	"net"
     9  	"strconv"
    10  
    11  	jc "github.com/juju/testing/checkers"
    12  	gc "gopkg.in/check.v1"
    13  
    14  	"github.com/juju/juju/agent"
    15  	"github.com/juju/juju/apiserver/client"
    16  	"github.com/juju/juju/apiserver/params"
    17  	envtools "github.com/juju/juju/environs/tools"
    18  	"github.com/juju/juju/instance"
    19  	"github.com/juju/juju/juju/testing"
    20  	"github.com/juju/juju/network"
    21  	"github.com/juju/juju/state"
    22  	"github.com/juju/juju/state/multiwatcher"
    23  	jujutesting "github.com/juju/juju/testing"
    24  	coretools "github.com/juju/juju/tools"
    25  )
    26  
    27  type machineConfigSuite struct {
    28  	testing.JujuConnSuite
    29  }
    30  
    31  var _ = gc.Suite(&machineConfigSuite{})
    32  
    33  func (s *machineConfigSuite) TestMachineConfig(c *gc.C) {
    34  	addrs := network.NewAddresses("1.2.3.4")
    35  	hc := instance.MustParseHardware("mem=4G arch=amd64")
    36  	apiParams := params.AddMachineParams{
    37  		Jobs:       []multiwatcher.MachineJob{multiwatcher.JobHostUnits},
    38  		InstanceId: instance.Id("1234"),
    39  		Nonce:      "foo",
    40  		HardwareCharacteristics: hc,
    41  		Addrs: params.FromNetworkAddresses(addrs),
    42  	}
    43  	machines, err := s.APIState.Client().AddMachines([]params.AddMachineParams{apiParams})
    44  	c.Assert(err, jc.ErrorIsNil)
    45  	c.Assert(len(machines), gc.Equals, 1)
    46  
    47  	machineId := machines[0].Machine
    48  	instanceConfig, err := client.InstanceConfig(s.State, machineId, apiParams.Nonce, "")
    49  	c.Assert(err, jc.ErrorIsNil)
    50  
    51  	envConfig, err := s.State.EnvironConfig()
    52  	c.Assert(err, jc.ErrorIsNil)
    53  	mongoAddrs := s.State.MongoConnectionInfo().Addrs
    54  	apiAddrs := []string{net.JoinHostPort("localhost", strconv.Itoa(envConfig.APIPort()))}
    55  
    56  	c.Check(instanceConfig.MongoInfo.Addrs, gc.DeepEquals, mongoAddrs)
    57  	c.Check(instanceConfig.APIInfo.Addrs, gc.DeepEquals, apiAddrs)
    58  	toolsURL := fmt.Sprintf("https://%s/environment/%s/tools/%s",
    59  		apiAddrs[0], jujutesting.EnvironmentTag.Id(), instanceConfig.Tools.Version)
    60  	c.Assert(instanceConfig.Tools.URL, gc.Equals, toolsURL)
    61  	c.Assert(instanceConfig.AgentEnvironment[agent.AllowsSecureConnection], gc.Equals, "true")
    62  }
    63  
    64  func (s *machineConfigSuite) TestSecureConnectionDisallowed(c *gc.C) {
    65  	// StateServingInfo without CAPrivateKey will not allow secure connections.
    66  	servingInfo := state.StateServingInfo{
    67  		PrivateKey:   jujutesting.ServerKey,
    68  		Cert:         jujutesting.ServerCert,
    69  		SharedSecret: "really, really secret",
    70  		APIPort:      4321,
    71  		StatePort:    1234,
    72  	}
    73  	s.State.SetStateServingInfo(servingInfo)
    74  	hc := instance.MustParseHardware("mem=4G arch=amd64")
    75  	apiParams := params.AddMachineParams{
    76  		Jobs:       []multiwatcher.MachineJob{multiwatcher.JobHostUnits},
    77  		InstanceId: instance.Id("1234"),
    78  		Nonce:      "foo",
    79  		HardwareCharacteristics: hc,
    80  	}
    81  	machines, err := s.APIState.Client().AddMachines([]params.AddMachineParams{apiParams})
    82  	c.Assert(err, jc.ErrorIsNil)
    83  	c.Assert(len(machines), gc.Equals, 1)
    84  
    85  	machineId := machines[0].Machine
    86  	instanceConfig, err := client.InstanceConfig(s.State, machineId, apiParams.Nonce, "")
    87  	c.Assert(err, jc.ErrorIsNil)
    88  	c.Assert(instanceConfig.AgentEnvironment[agent.AllowsSecureConnection], gc.Equals, "false")
    89  }
    90  
    91  func (s *machineConfigSuite) TestMachineConfigNoArch(c *gc.C) {
    92  	apiParams := params.AddMachineParams{
    93  		Jobs:       []multiwatcher.MachineJob{multiwatcher.JobHostUnits},
    94  		InstanceId: instance.Id("1234"),
    95  		Nonce:      "foo",
    96  	}
    97  	machines, err := s.APIState.Client().AddMachines([]params.AddMachineParams{apiParams})
    98  	c.Assert(err, jc.ErrorIsNil)
    99  	c.Assert(len(machines), gc.Equals, 1)
   100  	_, err = client.InstanceConfig(s.State, machines[0].Machine, apiParams.Nonce, "")
   101  	c.Assert(err, gc.ErrorMatches, fmt.Sprintf("arch is not set for %q", "machine-"+machines[0].Machine))
   102  }
   103  
   104  func (s *machineConfigSuite) TestMachineConfigNoTools(c *gc.C) {
   105  	s.PatchValue(&envtools.DefaultBaseURL, "")
   106  	addrs := network.NewAddresses("1.2.3.4")
   107  	hc := instance.MustParseHardware("mem=4G arch=amd64")
   108  	apiParams := params.AddMachineParams{
   109  		Series:     "quantal",
   110  		Jobs:       []multiwatcher.MachineJob{multiwatcher.JobHostUnits},
   111  		InstanceId: instance.Id("1234"),
   112  		Nonce:      "foo",
   113  		HardwareCharacteristics: hc,
   114  		Addrs: params.FromNetworkAddresses(addrs),
   115  	}
   116  	machines, err := s.APIState.Client().AddMachines([]params.AddMachineParams{apiParams})
   117  	c.Assert(err, jc.ErrorIsNil)
   118  	_, err = client.InstanceConfig(s.State, machines[0].Machine, apiParams.Nonce, "")
   119  	c.Assert(err, gc.ErrorMatches, coretools.ErrNoMatches.Error())
   120  }