Files
kata-containers/src/tools/log-parser/agent_test.go
Snir Sheriber c7dacb1211 log-parser: move the kata-log-parser from the tests repo
to the kata-containers repo under the src/tools/log-parser folder
and vendor the modules

Fixes: #4100
Signed-off-by: Snir Sheriber <ssheribe@redhat.com>
2022-05-10 13:23:25 +03:00

206 lines
3.6 KiB
Go

//
// Copyright (c) 2018 Intel Corporation
//
// SPDX-License-Identifier: Apache-2.0
//
package main
import (
"fmt"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
const (
testLevel = "info"
testPid = 2
testName = "kata-agent"
testMsg = "hello from the agent"
)
func TestAgentLogEntry(t *testing.T) {
assert := assert.New(t)
type testData struct {
le LogEntry
fromAgent bool
}
data := []testData{
{
LogEntry{},
false,
},
{
LogEntry{
Source: "agent",
Msg: "",
},
false,
},
{
LogEntry{
Source: "foo",
Msg: "time=\"2018-02-24T12:36:35.980548906Z\"",
},
false,
},
{
LogEntry{
Source: "agent",
Msg: "wibble",
},
false,
},
{
LogEntry{
Source: "agent",
Msg: "time=\"2018-02-24T12:36:35.980548906Z\"",
},
true,
},
}
for i, d := range data {
fromAgent := agentLogEntry(d.le)
if d.fromAgent {
assert.True(fromAgent, "test[%d]: %+v", i, d)
} else {
assert.False(fromAgent, "test[%d]: %+v", i, d)
}
}
}
func TestUnpackAgentLogEntry(t *testing.T) {
assert := assert.New(t)
type testData struct {
le LogEntry
expectError bool
}
now := time.Now().UTC()
nano := now.Format(time.RFC3339Nano)
source := "agent"
agentMsg := fmt.Sprintf("time=%q source=%s level=%s msg=%q pid=%d name=%s",
nano, source, testLevel, testMsg, testPid, testName)
data := []testData{
{
LogEntry{},
true,
},
{
LogEntry{
Source: "agent",
Msg: "",
},
true,
},
{
LogEntry{
Source: "agent",
Msg: "foo",
Filename: "",
},
true,
},
{
LogEntry{
Source: "agent",
Msg: "foo",
Filename: "/foo/bar.log",
Line: 0,
},
true,
},
{
LogEntry{
Count: 123,
Source: "agent",
Filename: "/foo/bar.txt",
Line: 101,
Msg: agentMsg,
},
false,
},
}
for i, d := range data {
agent, err := unpackAgentLogEntry(d.le)
if d.expectError {
assert.Errorf(err, "test[%d]: %+v", i, d)
} else {
assert.NoErrorf(err, "test[%d]: %+v", i, d)
// Ensure the newly unpacked LogEntry is valid
err = agent.Check(false)
assert.NoError(err)
assert.Equal(d.le.Filename, agent.Filename)
assert.Equal(d.le.Line, agent.Line)
assert.Equal(d.le.Count, agent.Count)
assert.Equal(d.le.Source, agent.Source)
assert.Equal(agent.Pid, testPid)
assert.Equal(agent.Msg, testMsg)
assert.Equal(agent.Name, testName)
assert.Equal(agent.Level, testLevel)
assert.Equal(agent.Time, now)
assert.Equal(agent.Source, source)
}
}
}
func TestUnpackAgentLogEntryWithContainerID(t *testing.T) {
assert := assert.New(t)
now := time.Now().UTC()
nano := now.Format(time.RFC3339Nano)
source := "agent"
containerID := "51f062b90853e22c0817392395bc0c43cd6a0bb9e456b1bd0e28433f805475d6"
execID := "51f062b90853e22c0817392395bc0c43cd6a0bb9e456b1bd0e28433f805475d6"
// agent log fields added when agent debug is enabled
msg := `"new request"`
grpcTrace := fmt.Sprintf(`container_id:"%s" exec_id:"%s"`, containerID, execID)
grpcRequest := "/grpc.AgentService/CreateContainer"
agentMsg := fmt.Sprintf("time=%q source=%s level=%s pid=%d name=%s msg=%q request=%q req=%q",
nano, source, testLevel, testPid, testName, msg, grpcRequest, grpcTrace)
le := LogEntry{
Count: 123,
Source: "agent",
Filename: "/foo/bar.txt",
Line: 101,
Msg: agentMsg,
}
agent, err := unpackAgentLogEntry(le)
assert.NoError(err)
// Ensure the newly unpacked LogEntry is valid
err = agent.Check(false)
assert.NoError(err)
assert.Equal(containerID, agent.Container)
}