github.com/mwhudson/juju@v0.0.0-20160512215208-90ff01f3497f/cmd/jujud/agent/common_test.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package agent
     5  
     6  import (
     7  	"fmt"
     8  	"path/filepath"
     9  	"time"
    10  
    11  	"github.com/juju/cmd"
    12  	"github.com/juju/names"
    13  	"github.com/juju/testing"
    14  
    15  	"github.com/juju/juju/agent"
    16  	"github.com/juju/juju/state"
    17  	coretesting "github.com/juju/juju/testing"
    18  	"github.com/juju/juju/worker"
    19  	workertest "github.com/juju/juju/worker/testing"
    20  )
    21  
    22  // This file contains bits of test infrastructure that are shared by
    23  // the unit and machine agent tests.
    24  
    25  type runner interface {
    26  	Run(*cmd.Context) error
    27  	Stop() error
    28  }
    29  
    30  // runWithTimeout runs an agent and waits
    31  // for it to complete within a reasonable time.
    32  func runWithTimeout(r runner) error {
    33  	done := make(chan error)
    34  	go func() {
    35  		done <- r.Run(nil)
    36  	}()
    37  	select {
    38  	case err := <-done:
    39  		return err
    40  	case <-time.After(coretesting.LongWait):
    41  	}
    42  	err := r.Stop()
    43  	return fmt.Errorf("timed out waiting for agent to finish; stop error: %v", err)
    44  }
    45  
    46  func newDummyWorker() worker.Worker {
    47  	return worker.NewSimpleWorker(func(stop <-chan struct{}) error {
    48  		<-stop
    49  		return nil
    50  	})
    51  }
    52  
    53  type FakeConfig struct {
    54  	agent.ConfigSetter
    55  }
    56  
    57  func (FakeConfig) LogDir() string {
    58  	return filepath.FromSlash("/var/log/juju/")
    59  }
    60  
    61  func (FakeConfig) Tag() names.Tag {
    62  	return names.NewMachineTag("42")
    63  }
    64  
    65  type FakeAgentConfig struct {
    66  	AgentConf
    67  }
    68  
    69  func (FakeAgentConfig) ReadConfig(string) error { return nil }
    70  
    71  func (FakeAgentConfig) CurrentConfig() agent.Config {
    72  	return FakeConfig{}
    73  }
    74  
    75  func (FakeAgentConfig) ChangeConfig(mutate agent.ConfigMutator) error {
    76  	return mutate(FakeConfig{})
    77  }
    78  
    79  func (FakeAgentConfig) CheckArgs([]string) error { return nil }
    80  
    81  type stubWorkerFactory struct {
    82  	*testing.Stub
    83  
    84  	ReturnNewModelWorker func() (worker.Worker, error)
    85  	ReturnNewWorker      worker.Worker
    86  }
    87  
    88  func newStubWorkerFactory(stub *testing.Stub) *stubWorkerFactory {
    89  	factory := &stubWorkerFactory{Stub: stub}
    90  	factory.ReturnNewWorker = &workertest.StubWorker{Stub: stub}
    91  	factory.ReturnNewModelWorker = factory.newWorker
    92  	return factory
    93  }
    94  
    95  func (s *stubWorkerFactory) NewModelWorker(st *state.State) func() (worker.Worker, error) {
    96  	s.AddCall("NewModelWorker", st)
    97  	s.NextErr() // Pop one off.
    98  
    99  	return s.ReturnNewModelWorker
   100  }
   101  
   102  func (s *stubWorkerFactory) newWorker() (worker.Worker, error) {
   103  	s.AddCall("newWorker")
   104  	if err := s.NextErr(); err != nil {
   105  		return nil, err
   106  	}
   107  
   108  	return s.ReturnNewWorker, nil
   109  }