func TestOutdatedEngine(t *testing.T) { engine := NewEngine("test", 0, engOpts) client := mockclient.NewMockClient() apiClient := engineapimock.NewMockClient() apiClient.On("Info", mock.Anything).Return(types.Info{}, nil) assert.Error(t, engine.ConnectWithClient(client, apiClient)) nop := nopclient.NewNopClient() nopAPIClient := engineapinop.NewNopClient() assert.Error(t, engine.ConnectWithClient(nop, nopAPIClient)) assert.False(t, engine.isConnected()) client.Mock.AssertExpectations(t) apiClient.Mock.AssertExpectations(t) }
// NewEngine is exported func NewEngine(addr string, overcommitRatio float64, opts *EngineOpts) *Engine { e := &Engine{ Addr: addr, client: nopclient.NewNopClient(), apiClient: engineapinop.NewNopClient(), refreshDelayer: newDelayer(opts.RefreshMinInterval, opts.RefreshMaxInterval), Labels: make(map[string]string), stopCh: make(chan struct{}), containers: make(map[string]*Container), networks: make(map[string]*Network), volumes: make(map[string]*Volume), state: statePending, updatedAt: time.Now(), overcommitRatio: int64(overcommitRatio * 100), opts: opts, } return e }
// Disconnect will stop all monitoring of the engine. // The Engine object cannot be further used without reconnecting it first. func (e *Engine) Disconnect() { e.Lock() defer e.Unlock() // Resource clean up should be done only once if e.state == stateDisconnected { return } // close the chan close(e.stopCh) e.client.StopAllMonitorEvents() // close idle connections if dc, ok := e.client.(*dockerclient.DockerClient); ok { closeIdleConnections(dc.HTTPClient) } e.client = nopclient.NewNopClient() e.apiClient = engineapinop.NewNopClient() e.state = stateDisconnected e.emitEvent("engine_disconnect") }
func TestEngineConnectionFailure(t *testing.T) { engine := NewEngine("test", 0, engOpts) assert.False(t, engine.isConnected()) // Always fail. client := mockclient.NewMockClient() apiClient := engineapimock.NewMockClient() apiClient.On("Info", mock.Anything).Return(types.Info{}, errors.New("fail")) // Connect() should fail assert.Error(t, engine.ConnectWithClient(client, apiClient)) // isConnected() should return false nop := nopclient.NewNopClient() nopAPIClient := engineapinop.NewNopClient() assert.Error(t, engine.ConnectWithClient(nop, nopAPIClient)) assert.False(t, engine.isConnected()) client.Mock.AssertExpectations(t) apiClient.Mock.AssertExpectations(t) }