Artem Chernyshev 5c6648e3d2
fix: make talosctl command return nonzero error codes if it had errors
Multinode requests were printing out the errors for each node to stderr,
but they didn't set the global error.

Refactor the code a bit to use a single function for handling that logic
to avoid rewriting it in many other places.

Signed-off-by: Artem Chernyshev <artem.chernyshev@talos-systems.com>
2022-08-12 14:19:45 +03:00

66 lines
1.8 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/.
//go:build integration_cli
// +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", "--nodes", suite.RandomDiscoveredNodeInternalIP()}) // default checks for stdout not empty
}
// TestTailLogs verifies that logs can be displayed with tail lines.
func (suite *LogsSuite) TestTailLogs() {
node := suite.RandomDiscoveredNodeInternalIP()
// run some machined API calls to produce enough log lines
for i := 0; i < 10; i++ {
suite.RunCLI([]string{"-n", node, "version"})
}
suite.RunCLI([]string{"logs", "apid", "-n", node, "--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", "--nodes", suite.RandomDiscoveredNodeInternalIP(), "servicenotfound"},
base.StdoutEmpty(),
base.StderrNotEmpty(),
base.StderrShouldMatch(regexp.MustCompile(`ERROR:.+ log "servicenotfound" was not registered`)),
base.ShouldFail(),
)
}
func init() {
allSuites = append(allSuites, new(LogsSuite))
}