diff --git a/client/server/server.go b/client/server/server.go index 2d8f759cd..cba09a8b9 100644 --- a/client/server/server.go +++ b/client/server/server.go @@ -84,6 +84,7 @@ func New(ctx context.Context, configPath, logFile string) *Server { }, logFile: logFile, persistNetworkMap: true, + statusRecorder: peer.NewRecorder(""), } } @@ -136,9 +137,6 @@ func (s *Server) Start() error { s.config = config - if s.statusRecorder == nil { - s.statusRecorder = peer.NewRecorder(config.ManagementURL.String()) - } s.statusRecorder.UpdateManagementAddress(config.ManagementURL.String()) s.statusRecorder.UpdateRosenpass(config.RosenpassEnabled, config.RosenpassPermissive) @@ -622,9 +620,6 @@ func (s *Server) Up(callerCtx context.Context, _ *proto.UpRequest) (*proto.UpRes return nil, fmt.Errorf("config is not defined, please call login command first") } - if s.statusRecorder == nil { - s.statusRecorder = peer.NewRecorder(s.config.ManagementURL.String()) - } s.statusRecorder.UpdateManagementAddress(s.config.ManagementURL.String()) s.statusRecorder.UpdateRosenpass(s.config.RosenpassEnabled, s.config.RosenpassPermissive) @@ -692,9 +687,6 @@ func (s *Server) Status( statusResponse := proto.StatusResponse{Status: string(status), DaemonVersion: version.NetbirdVersion()} - if s.statusRecorder == nil { - s.statusRecorder = peer.NewRecorder(s.config.ManagementURL.String()) - } s.statusRecorder.UpdateManagementAddress(s.config.ManagementURL.String()) s.statusRecorder.UpdateRosenpass(s.config.RosenpassEnabled, s.config.RosenpassPermissive) diff --git a/client/server/server_test.go b/client/server/server_test.go index 5083a29f2..a765cceb5 100644 --- a/client/server/server_test.go +++ b/client/server/server_test.go @@ -3,20 +3,22 @@ package server import ( "context" "net" + "net/url" "testing" "time" "github.com/golang/mock/gomock" - "github.com/stretchr/testify/require" - "go.opentelemetry.io/otel" - "github.com/netbirdio/management-integrations/integrations" log "github.com/sirupsen/logrus" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.opentelemetry.io/otel" "google.golang.org/grpc" "google.golang.org/grpc/keepalive" "github.com/netbirdio/netbird/client/internal" "github.com/netbirdio/netbird/client/internal/peer" + daemonProto "github.com/netbirdio/netbird/client/proto" mgmtProto "github.com/netbirdio/netbird/management/proto" "github.com/netbirdio/netbird/management/server" "github.com/netbirdio/netbird/management/server/activity" @@ -84,6 +86,72 @@ func TestConnectWithRetryRuns(t *testing.T) { } } +func TestServer_Up(t *testing.T) { + ctx := internal.CtxInitState(context.Background()) + + s := New(ctx, t.TempDir()+"/config.json", "console") + + err := s.Start() + require.NoError(t, err) + + u, err := url.Parse("http://non-existent-url-for-testing.invalid:12345") + require.NoError(t, err) + s.config = &internal.Config{ + ManagementURL: u, + } + + upCtx, cancel := context.WithTimeout(ctx, 1*time.Second) + defer cancel() + + upReq := &daemonProto.UpRequest{} + _, err = s.Up(upCtx, upReq) + + assert.Contains(t, err.Error(), "NeedsLogin") +} + +type mockSubscribeEventsServer struct { + ctx context.Context + sentEvents []*daemonProto.SystemEvent + grpc.ServerStream +} + +func (m *mockSubscribeEventsServer) Send(event *daemonProto.SystemEvent) error { + m.sentEvents = append(m.sentEvents, event) + return nil +} + +func (m *mockSubscribeEventsServer) Context() context.Context { + return m.ctx +} + +func TestServer_SubcribeEvents(t *testing.T) { + ctx := internal.CtxInitState(context.Background()) + + s := New(ctx, t.TempDir()+"/config.json", "console") + + err := s.Start() + require.NoError(t, err) + + u, err := url.Parse("http://non-existent-url-for-testing.invalid:12345") + require.NoError(t, err) + s.config = &internal.Config{ + ManagementURL: u, + } + + ctx, cancel := context.WithTimeout(ctx, 1*time.Second) + defer cancel() + + upReq := &daemonProto.SubscribeRequest{} + mockServer := &mockSubscribeEventsServer{ + ctx: ctx, + sentEvents: make([]*daemonProto.SystemEvent, 0), + ServerStream: nil, + } + err = s.SubscribeEvents(upReq, mockServer) + + assert.NoError(t, err) +} + type mockServer struct { mgmtProto.ManagementServiceServer counter *int