diff --git a/pkg/networkservice/chains/nsmgr/select_forwarder_test.go b/pkg/networkservice/chains/nsmgr/select_forwarder_test.go index e220f6fbf..d62c10fd6 100644 --- a/pkg/networkservice/chains/nsmgr/select_forwarder_test.go +++ b/pkg/networkservice/chains/nsmgr/select_forwarder_test.go @@ -376,12 +376,17 @@ func Test_DiscoverForwarder_Should_KeepSelectedForwarderWhileConnectionIsFine(t conn, err = nsc.Request(ctx, request.Clone()) require.NoError(t, err) require.Equal(t, 1, counter.UniqueRequests()) + require.Equal(t, 3, counter.Requests()) require.Equal(t, 0, counter.Closes()) require.Equal(t, selectedForwarder, conn.GetPath().GetPathSegments()[2].Name) // datapath is down livenessValue.Store(false) domain.Nodes[0].Forwarders[selectedForwarder].Cancel() + // waiting for healing + require.Eventually(t, func() bool { + return counter.Requests() >= 4 + }, timeout, tick) request.Connection = conn conn, err = nsc.Request(ctx, request.Clone()) diff --git a/pkg/registry/core/chain/ns_registry.go b/pkg/registry/core/chain/ns_registry.go index 71a198a3a..1ef62c804 100644 --- a/pkg/registry/core/chain/ns_registry.go +++ b/pkg/registry/core/chain/ns_registry.go @@ -1,6 +1,6 @@ -// Copyright (c) 2020 Cisco Systems, Inc. +// Copyright (c) 2020-2023 Cisco Systems, Inc. // -// Copyright (c) 2020-2021 Doc.ai and/or its affiliates. +// Copyright (c) 2020-2023 Doc.ai and/or its affiliates. // // SPDX-License-Identifier: Apache-2.0 // @@ -27,10 +27,10 @@ import ( // NewNetworkServiceRegistryServer - creates a chain of servers func NewNetworkServiceRegistryServer(servers ...registry.NetworkServiceRegistryServer) registry.NetworkServiceRegistryServer { - return next.NewNetworkServiceRegistryServer(next.NewWrappedNetworkServiceRegistryServer(trace.NewNetworkServiceRegistryServer, servers...)) + return next.NewWrappedNetworkServiceRegistryServer(trace.NewNetworkServiceRegistryServer, servers...) } // NewNetworkServiceRegistryClient - creates a chain of clients func NewNetworkServiceRegistryClient(clients ...registry.NetworkServiceRegistryClient) registry.NetworkServiceRegistryClient { - return next.NewNetworkServiceRegistryClient(next.NewWrappedNetworkServiceRegistryClient(trace.NewNetworkServiceRegistryClient, clients...)) + return next.NewWrappedNetworkServiceRegistryClient(trace.NewNetworkServiceRegistryClient, clients...) } diff --git a/pkg/registry/core/chain/nse_registry.go b/pkg/registry/core/chain/nse_registry.go index 341611d6e..09a191b84 100644 --- a/pkg/registry/core/chain/nse_registry.go +++ b/pkg/registry/core/chain/nse_registry.go @@ -1,6 +1,6 @@ -// Copyright (c) 2020 Cisco Systems, Inc. +// Copyright (c) 2020-2023 Cisco Systems, Inc. // -// Copyright (c) 2020-2021 Doc.ai and/or its affiliates. +// Copyright (c) 2020-2023 Doc.ai and/or its affiliates. // // SPDX-License-Identifier: Apache-2.0 // @@ -33,5 +33,5 @@ func NewNetworkServiceEndpointRegistryServer(servers ...registry.NetworkServiceE // NewNetworkServiceEndpointRegistryClient - creates a chain of clients func NewNetworkServiceEndpointRegistryClient(clients ...registry.NetworkServiceEndpointRegistryClient) registry.NetworkServiceEndpointRegistryClient { - return next.NewNetworkServiceEndpointRegistryClient(next.NewWrappedNetworkServiceEndpointRegistryClient(trace.NewNetworkServiceEndpointRegistryClient, clients...)) + return next.NewWrappedNetworkServiceEndpointRegistryClient(trace.NewNetworkServiceEndpointRegistryClient, clients...) } diff --git a/pkg/registry/core/trace/testutil/testutil.go b/pkg/registry/core/trace/testutil/testutil.go index 9ff72ac02..990834cd4 100644 --- a/pkg/registry/core/trace/testutil/testutil.go +++ b/pkg/registry/core/trace/testutil/testutil.go @@ -18,148 +18,10 @@ package testutil import ( - "context" "fmt" "strings" - - "github.com/pkg/errors" - - "github.com/golang/protobuf/ptypes/empty" - "github.com/networkservicemesh/api/pkg/api/networkservice" - "github.com/networkservicemesh/api/pkg/api/networkservice/mechanisms/cls" - - "github.com/networkservicemesh/sdk/pkg/networkservice/core/next" ) -// NewConnection - create connection for testing -func NewConnection() *networkservice.NetworkServiceRequest { - return &networkservice.NetworkServiceRequest{ - Connection: &networkservice.Connection{ - Id: "conn-1", - Context: &networkservice.ConnectionContext{ - IpContext: &networkservice.IPContext{ - SrcIpRequired: true, - }, - }, - }, - MechanismPreferences: []*networkservice.Mechanism{ - { - Type: "KERNEL", - Cls: cls.LOCAL, - }, - { - Type: "KERNEL", - Cls: cls.LOCAL, - Parameters: map[string]string{ - "label": "v2", - }, - }, - }, - } -} - -// LabelChangerFirstServer - common server for testing -type LabelChangerFirstServer struct{} - -// Request - test request -func (c *LabelChangerFirstServer) Request(ctx context.Context, request *networkservice.NetworkServiceRequest) (*networkservice.Connection, error) { - request.Connection.Labels = map[string]string{ - "Label": "A", - } - rv, err := next.Server(ctx).Request(ctx, request) - if err != nil { - return nil, err - } - rv.Labels = map[string]string{ - "Label": "D", - } - return rv, err -} - -// Close - test request -func (c *LabelChangerFirstServer) Close(ctx context.Context, connection *networkservice.Connection) (*empty.Empty, error) { - connection.Labels = map[string]string{ - "Label": "W", - } - r, err := next.Server(ctx).Close(ctx, connection) - connection.Labels = map[string]string{ - "Label": "Z", - } - return r, err -} - -// LabelChangerSecondServer - common server for testing -type LabelChangerSecondServer struct{} - -// Request - test request -func (c *LabelChangerSecondServer) Request(ctx context.Context, request *networkservice.NetworkServiceRequest) (*networkservice.Connection, error) { - request.Connection.Labels = map[string]string{ - "Label": "B", - } - rv, err := next.Server(ctx).Request(ctx, request) - if err != nil { - return nil, err - } - rv.Labels = map[string]string{ - "Label": "C", - } - return rv, err -} - -// Close - test request -func (c *LabelChangerSecondServer) Close(ctx context.Context, connection *networkservice.Connection) (*empty.Empty, error) { - connection.Labels = map[string]string{ - "Label": "X", - } - r, err := next.Server(ctx).Close(ctx, connection) - connection.Labels = map[string]string{ - "Label": "Y", - } - return r, err -} - -// CustomError - custom error for testing -type CustomError struct{} - -// Error - error message example -func (*CustomError) Error() string { - return `Error returned from api/pkg/api/networkservice/networkServiceClient.Close -github.com/networkservicemesh/sdk/pkg/networkservice/core/trace.(*beginTraceClient).Close - /root/go/pkg/mod/github.com/networkservicemesh/sdk@v0.5.1-0.20210929180427-ec235de055f1/pkg/networkservice/core/trace/client.go:85 -github.com/networkservicemesh/sdk/pkg/networkservice/core/next.(*nextClient).Close - /root/go/pkg/mod/github.com/networkservicemesh/sdk@v0.5.1-0.20210929180427-ec235de055f1/pkg/networkservice/core/next/client.go:65 -github.com/networkservicemesh/sdk/pkg/networkservice/core/next.(*nextClient).Close - /root/go/pkg/mod/github.com/networkservicemesh/sdk@v0.5.1-0.20210929180427-ec235de055f1/pkg/networkservice/core/next/client.go:65 -github.com/networkservicemesh/sdk/pkg/networkservice/core/trace.(*endTraceClient).Close - /root/go/pkg/mod/github.com/networkservicemesh/sdk@v0.5.1-0.20210929180427-ec235de055f1/pkg/networkservice/core/trace/client.go:106 -github.com/networkservicemesh/sdk/pkg/networkservice/core/next.(*nextClient).Close - /root/go/pkg/mod/github.com/networkservicemesh/sdk@v0.5.1-0.20210929180427-ec235de055f1/pkg/networkservice/core/next/client.go:65` -} - -// StackTrace - testing errors utility -func (*CustomError) StackTrace() errors.StackTrace { - return []errors.Frame{} -} - -// ErrorServer - error server for testing -type ErrorServer struct{} - -// Request - test request -func (c *ErrorServer) Request(ctx context.Context, request *networkservice.NetworkServiceRequest) (*networkservice.Connection, error) { - request.Connection.Labels = map[string]string{ - "Label": "B", - } - - _, _ = next.Server(ctx).Request(ctx, request) - - return nil, &CustomError{} -} - -// Close - test request -func (c *ErrorServer) Close(ctx context.Context, connection *networkservice.Connection) (*empty.Empty, error) { - return next.Server(ctx).Close(ctx, connection) -} - // TrimLogTime - to format logs func TrimLogTime(buff fmt.Stringer) string { // Logger created by the trace chain element uses custom formatter, which prints date and time info in each line diff --git a/pkg/registry/core/trace/traceconcise/traceconcise_test.go b/pkg/registry/core/trace/traceconcise/traceconcise_test.go index fa5d48996..9cb3d4ec1 100644 --- a/pkg/registry/core/trace/traceconcise/traceconcise_test.go +++ b/pkg/registry/core/trace/traceconcise/traceconcise_test.go @@ -27,11 +27,11 @@ import ( "github.com/sirupsen/logrus" "go.uber.org/goleak" - "github.com/networkservicemesh/sdk/pkg/networkservice/core/trace/testutil" "github.com/networkservicemesh/sdk/pkg/registry/common/memory" "github.com/networkservicemesh/sdk/pkg/registry/common/null" "github.com/networkservicemesh/sdk/pkg/registry/core/chain" "github.com/networkservicemesh/sdk/pkg/registry/core/streamchannel" + "github.com/networkservicemesh/sdk/pkg/registry/core/trace/testutil" "github.com/networkservicemesh/sdk/pkg/registry/utils/inject/injecterror" "github.com/networkservicemesh/sdk/pkg/tools/log" diff --git a/pkg/tools/dnsutils/fanout/handler.go b/pkg/tools/dnsutils/fanout/handler.go index 5d006ec68..debc0817e 100644 --- a/pkg/tools/dnsutils/fanout/handler.go +++ b/pkg/tools/dnsutils/fanout/handler.go @@ -1,4 +1,4 @@ -// Copyright (c) 2022 Cisco Systems, Inc. +// Copyright (c) 2022-2023 Cisco Systems, Inc. // // SPDX-License-Identifier: Apache-2.0 // @@ -66,7 +66,7 @@ func (h *fanoutHandler) ServeDNS(ctx context.Context, rw dns.ResponseWriter, msg address += fmt.Sprintf(":%d", h.dnsPort) } - var resp, _, err = client.Exchange(msg, address) + var resp, _, err = client.ExchangeContext(ctx, msg, address) if err != nil { log.FromContext(ctx).WithField("fanoutHandler", "ServeDNS").Warnf("got an error during exchanging with address %v: %v", address, err.Error()) responseCh <- nil