talos/internal/integration/api/version.go
Andrey Smirnov 10a40a15d9 fix: extract errors from API response
This PR only touches `Version` method, but I will expand it to other
methods in the next PR.

When proxying to many upstreams, errors are wrapped as responses as we
can't return error and response from grpc call. Reflect-based function
was introduced to filter out responses which contain errors as
multierror. Reflection was used, as each response is a different Go
type, and we can't write a generic function for it.

osctl was updated to support having both resp & err not nil. One failed
response shouldn't result in error.

Re-enabled integration test for multiple targets and version
consistency, need e2e validation.

Signed-off-by: Andrey Smirnov <smirnov.andrey@gmail.com>
2019-12-05 09:44:10 -08:00

55 lines
1.4 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_api
package api
import (
"context"
"github.com/talos-systems/talos/cmd/osctl/pkg/client"
"github.com/talos-systems/talos/internal/integration/base"
)
// VersionSuite verifies version API
type VersionSuite struct {
base.APISuite
}
// SuiteName ...
func (suite *VersionSuite) SuiteName() string {
return "api.VersionSuite"
}
// TestExpectedVersionMaster verifies master node version matches expected
func (suite *VersionSuite) TestExpectedVersionMaster() {
v, err := suite.Client.Version(context.Background())
suite.Require().NoError(err)
suite.Assert().Equal(suite.Version, v.Response[0].Version.Tag)
}
// TestSameVersionCluster verifies that all the nodes are on the same version
func (suite *VersionSuite) TestSameVersionCluster() {
nodes := suite.DiscoverNodes()
suite.Require().NotEmpty(nodes)
ctx := client.WithTargets(context.Background(), nodes...)
v, err := suite.Client.Version(ctx)
suite.Require().NoError(err)
suite.Require().Len(v.Response, len(nodes))
expectedVersion := v.Response[0].Version.Tag
for _, version := range v.Response {
suite.Assert().Equal(expectedVersion, version.Version.Tag)
}
}
func init() {
allSuites = append(allSuites, new(VersionSuite))
}