Andrey Smirnov 0a4645fe80 feat: implement circular buffer for system logs
This replaces logging to files with inotify following to pure in-memory
circular buffer which grows on demand capped at specified maximum
capacity.

The concern with previous approach was that logs on tmpfs were growing
without any bound potentially consuming all the node memory.

Signed-off-by: Andrey Smirnov <smirnov.andrey@gmail.com>
2020-06-26 15:33:54 -07:00

63 lines
1.6 KiB
Go

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
// +build integration_cli
package cli
import (
"fmt"
"regexp"
"strings"
"github.com/talos-systems/talos/internal/integration/base"
)
// LogsSuite verifies logs command
type LogsSuite struct {
base.CLISuite
}
// SuiteName ...
func (suite *LogsSuite) SuiteName() string {
return "cli.LogsSuite"
}
// TestServiceLogs verifies that logs are displayed.
func (suite *LogsSuite) TestServiceLogs() {
suite.RunCLI([]string{"logs", "kubelet"}) // default checks for stdout not empty
}
// TestTailLogs verifies that logs can be displayed with tail lines.
func (suite *LogsSuite) TestTailLogs() {
// run some machined API calls to produce enough log lines
for i := 0; i < 10; i++ {
suite.RunCLI([]string{"version"})
}
suite.RunCLI([]string{"logs", "apid", "--tail", "5"},
base.StdoutMatchFunc(func(stdout string) error {
lines := strings.Count(stdout, "\n")
if lines != 5 {
return fmt.Errorf("expected %d lines, found %d lines", 5, lines)
}
return nil
}))
}
// TestServiceNotFound verifies that logs displays an error if service is not found.
func (suite *LogsSuite) TestServiceNotFound() {
suite.RunCLI([]string{"logs", "servicenotfound"},
base.ShouldFail(),
base.StdoutEmpty(),
base.StderrNotEmpty(),
base.StderrShouldMatch(regexp.MustCompile(`error getting logs:.+ log "servicenotfound" was not registered`)),
)
}
func init() {
allSuites = append(allSuites, new(LogsSuite))
}