func TestThatWeListenToStdOutUnixSocket(t *testing.T) { tmpdir, err := ioutil.TempDir("", "testing") assert.NoError(t, err) defer os.RemoveAll(tmpdir) instance := &instance{ applicationId: "1234", wardenJobId: 56, wardenContainerPath: tmpdir, index: 3, drainUrls: []string{"syslog://10.20.30.40:8050"}} os.MkdirAll(instance.identifier(), 0777) stdoutSocketPath := filepath.Join(instance.identifier(), "stdout.sock") stderrSocketPath := filepath.Join(instance.identifier(), "stderr.sock") os.Remove(stdoutSocketPath) os.Remove(stderrSocketPath) stdoutListener, err := net.Listen("unix", stdoutSocketPath) defer stdoutListener.Close() assert.NoError(t, err) stderrListener, err := net.Listen("unix", stderrSocketPath) defer stderrListener.Close() assert.NoError(t, err) expectedMessage := "Some Output\n" secondLogMessage := "toally different\n" mockLoggregatorClient := new(MockLoggregatorClient) mockLoggregatorClient.received = make(chan *[]byte) instance.startListening(mockLoggregatorClient, testhelpers.Logger()) connection, err := stdoutListener.Accept() defer connection.Close() assert.NoError(t, err) _, err = connection.Write([]byte(expectedMessage)) assert.NoError(t, err) receivedMessage := testhelpers.GetBackendMessage(t, <-mockLoggregatorClient.received) assert.Equal(t, "1234", receivedMessage.GetAppId()) assert.Equal(t, logmessage.LogMessage_WARDEN_CONTAINER, receivedMessage.GetSourceType()) assert.Equal(t, logmessage.LogMessage_OUT, receivedMessage.GetMessageType()) assert.Equal(t, expectedMessage, string(receivedMessage.GetMessage())) assert.Equal(t, []string{"syslog://10.20.30.40:8050"}, receivedMessage.GetDrainUrls()) _, err = connection.Write([]byte(secondLogMessage)) assert.NoError(t, err) receivedMessage = testhelpers.GetBackendMessage(t, <-mockLoggregatorClient.received) assert.Equal(t, "1234", receivedMessage.GetAppId()) assert.Equal(t, logmessage.LogMessage_WARDEN_CONTAINER, receivedMessage.GetSourceType()) assert.Equal(t, logmessage.LogMessage_OUT, receivedMessage.GetMessageType()) assert.Equal(t, secondLogMessage, string(receivedMessage.GetMessage())) assert.Equal(t, []string{"syslog://10.20.30.40:8050"}, receivedMessage.GetDrainUrls()) }
func TestTheAgentMonitorsChangesInInstances(t *testing.T) { // defer os.RemoveAll(tmpdir) helperInstance := &instance{ applicationId: "1234", wardenJobId: 56, wardenContainerPath: tmpdir, index: 3} os.MkdirAll(helperInstance.identifier(), 0777) stdoutSocketPath := filepath.Join(helperInstance.identifier(), "stdout.sock") stderrSocketPath := filepath.Join(helperInstance.identifier(), "stderr.sock") os.Remove(stdoutSocketPath) os.Remove(stderrSocketPath) stdoutListener, err := net.Listen("unix", stdoutSocketPath) defer stdoutListener.Close() assert.NoError(t, err) stderrListener, err := net.Listen("unix", stderrSocketPath) defer stderrListener.Close() assert.NoError(t, err) expectedMessage := "Some Output\n" mockLoggregatorClient := new(MockLoggregatorClient) mockLoggregatorClient.received = make(chan *[]byte) writeToFile(t, `{"instances": [{"state": "RUNNING", "application_id": "1234", "warden_job_id": 56, "warden_container_path":"`+tmpdir+`", "instance_index": 3}]}`, true) agent := NewAgent(filePath(), testhelpers.Logger()) go agent.Start(mockLoggregatorClient) connection, err := stdoutListener.Accept() defer connection.Close() assert.NoError(t, err) _, err = connection.Write([]byte(expectedMessage)) assert.NoError(t, err) receivedMessage := testhelpers.GetBackendMessage(t, <-mockLoggregatorClient.received) assert.Equal(t, "1234", receivedMessage.GetAppId()) assert.Equal(t, logmessage.LogMessage_WARDEN_CONTAINER, receivedMessage.GetSourceType()) assert.Equal(t, logmessage.LogMessage_OUT, receivedMessage.GetMessageType()) assert.Equal(t, expectedMessage, string(receivedMessage.GetMessage())) }