Andrey Smirnov 97d18b1c43 test: fix cli tests after load-balancing got enabled
There were three problems:

* cli tests did commands in sequence assuming they all hit the same
node, but with load-balancing it's no longer true

* restart test was affected, as it hit different node for check after
restart, and it succeeded immediately, while on original node process
was still starting which resulted in failure in the next tests; replace
the check to make sure service is up and healthy, so that test leaves
cluster in a good state

* restart API response had wrong format (no message returned) which
resulted in failures with apid proxy (when used with `-n`)

Signed-off-by: Andrey Smirnov <smirnov.andrey@gmail.com>
2020-07-09 14:06:30 -07:00

69 lines
1.7 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"
"math/rand"
"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() {
nodes := suite.DiscoverNodes()
suite.Require().NotEmpty(nodes)
node := nodes[rand.Intn(len(nodes))]
// 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", "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))
}