github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/environs/manual/winrmprovisioner/provisioner_test.go (about) 1 // Copyright 2018 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package winrmprovisioner_test 5 6 import ( 7 "bytes" 8 "fmt" 9 "io" 10 11 jc "github.com/juju/testing/checkers" 12 gc "gopkg.in/check.v1" 13 14 "github.com/juju/juju/apiserver/params" 15 "github.com/juju/juju/environs/manual" 16 "github.com/juju/juju/environs/manual/winrmprovisioner" 17 ) 18 19 type TestClientAPI struct{} 20 21 func (t TestClientAPI) AddMachines(p []params.AddMachineParams) ([]params.AddMachinesResult, error) { 22 return make([]params.AddMachinesResult, 1, 1), nil 23 } 24 25 func (t TestClientAPI) ForceDestroyMachines(machines ...string) error { 26 if machines == nil { 27 return fmt.Errorf("epty machines") 28 } 29 return nil 30 } 31 32 func (t TestClientAPI) ProvisioningScript(param params.ProvisioningScriptParams) (script string, err error) { 33 return "magnifi script", nil 34 } 35 36 type provisionerSuite struct { 37 client *TestClientAPI 38 } 39 40 var _ = gc.Suite(&provisionerSuite{}) 41 42 func (s *provisionerSuite) getArgs(c *gc.C) manual.ProvisionMachineArgs { 43 s.client = &TestClientAPI{} 44 45 return manual.ProvisionMachineArgs{ 46 Host: winrmListenerAddr, 47 User: "Administrator", 48 Client: s.client, 49 } 50 } 51 52 func (s *provisionerSuite) TestProvisionMachine(c *gc.C) { 53 var err error 54 args := s.getArgs(c) 55 var stdin, stderr, stdout bytes.Buffer 56 args.Stdin, args.Stdout, args.Stderr = &stdin, &stderr, &stdout 57 58 args.WinRM = manual.WinRMArgs{} 59 args.WinRM.Client = &fakeWinRM{ 60 fakePing: func() error { 61 return nil 62 }, 63 fakeRun: func(cmd string, stdout, stderr io.Writer) error { 64 return nil 65 }, 66 } 67 68 // this should return this error 69 // No hardware fields on running the powershell deteciton script 70 machineId, err := winrmprovisioner.ProvisionMachine(args) 71 c.Assert(err, gc.NotNil) 72 c.Assert(machineId, jc.DeepEquals, "") 73 74 args.WinRM.Client = &fakeWinRM{ 75 fakePing: func() error { 76 return nil 77 }, 78 79 fakeRun: func(cmd string, stdout, stderr io.Writer) error { 80 c.Assert((len(cmd) > 0), gc.Equals, true) 81 fmt.Fprintf(stdout, "amd64\r\n") 82 fmt.Fprintf(stdout, "16\r\n") 83 fmt.Fprintf(stdout, "win2012r2\r\n") 84 fmt.Fprintf(stdout, "4\r\n") 85 return nil 86 }, 87 } 88 89 machineId, err = winrmprovisioner.ProvisionMachine(args) 90 c.Assert(err, gc.IsNil) 91 c.Assert(machineId, jc.DeepEquals, "") 92 93 // this should return that the machine is already provisioned 94 args.WinRM.Client = &fakeWinRM{ 95 fakePing: func() error { 96 return nil 97 }, 98 99 fakeRun: func(cmd string, stdout, stderr io.Writer) error { 100 c.Assert((len(cmd) > 0), gc.Equals, true) 101 fmt.Fprintf(stdout, "Yes\r\n") 102 return nil 103 }, 104 } 105 machineId, err = winrmprovisioner.ProvisionMachine(args) 106 c.Assert(err.Error(), jc.DeepEquals, "machine is already provisioned") 107 c.Assert(machineId, jc.DeepEquals, "") 108 }