// mockShellCommand creates a new command with the given // name and contents, and patches $PATH so that it will be // executed by preference. It returns the name of a file // that is written by each call to the command - mockShellCalls // can be used to retrieve the calls. func mockShellCommand(c *gc.C, s *testing.CleanupSuite, name string) string { dir := c.MkDir() s.PatchEnvPathPrepend(dir) // Note the shell script produces output of the form: // +arg1+\n // +arg2+\n // ... // +argn+\n // - // // It would be nice if there was a simple way of unambiguously // quoting shell arguments, but this will do as long // as no argument contains a newline character. outputFile := filepath.Join(dir, name+".out") contents := `#!/bin/sh { for i in "$@"; do echo +"$i"+ done echo - } >> ` + utils.ShQuote(outputFile) + ` ` err := ioutil.WriteFile(filepath.Join(dir, name), []byte(contents), 0755) c.Assert(err, gc.IsNil) return outputFile }
func PatchCreateContainer(s *testing.CleanupSuite, c *gc.C, expectedURL string) startInstanceFunc { mockFunc := func(_ *localEnviron, args environs.StartInstanceParams) (instance.Instance, *instance.HardwareCharacteristics, error) { c.Assert(args.Tools, gc.HasLen, 1) c.Assert(args.Tools[0].URL, gc.Equals, expectedURL) return &mockInstance{id: "mock"}, nil, nil } s.PatchValue(&createContainer, mockFunc) return mockFunc }
func PatchGenerateCertificate(s *testing.CleanupSuite, cert, key string) { s.PatchValue(&generateCertificate, func() ([]byte, []byte, error) { return []byte(cert), []byte(key), nil }) }
// PatchOfficialDataSources is used by tests. // We replace one of the urls with the supplied value // and prevent the other from being used. func PatchOfficialDataSources(s *testing.CleanupSuite, url string) { s.PatchValue(&imagemetadata.DefaultUbuntuBaseURL, "") s.PatchValue(&imagemetadata.DefaultJujuBaseURL, url) }