diff --git a/shared/management/client/rest/events_test.go b/shared/management/client/rest/events_test.go index 1ee10eb6e..d4bdae15d 100644 --- a/shared/management/client/rest/events_test.go +++ b/shared/management/client/rest/events_test.go @@ -21,37 +21,76 @@ var ( Activity: "AccountCreate", ActivityCode: api.EventActivityCodeAccountCreate, } + + testNetworkTrafficResponse = api.NetworkTrafficEventsResponse{ + Data: []api.NetworkTrafficEvent{}, + Page: 1, + PageSize: 50, + } ) -func TestEvents_List_200(t *testing.T) { +func TestEvents_ListAuditEvents_200(t *testing.T) { withMockClient(func(c *rest.Client, mux *http.ServeMux) { - mux.HandleFunc("/api/events", func(w http.ResponseWriter, r *http.Request) { + mux.HandleFunc("/api/events/audit", func(w http.ResponseWriter, r *http.Request) { retBytes, _ := json.Marshal([]api.Event{testEvent}) _, err := w.Write(retBytes) require.NoError(t, err) }) - ret, err := c.Events.List(context.Background()) + ret, err := c.Events.ListAuditEvents(context.Background()) require.NoError(t, err) assert.Len(t, ret, 1) assert.Equal(t, testEvent, ret[0]) }) } -func TestEvents_List_Err(t *testing.T) { +func TestEvents_ListAuditEvents_Err(t *testing.T) { withMockClient(func(c *rest.Client, mux *http.ServeMux) { - mux.HandleFunc("/api/events", func(w http.ResponseWriter, r *http.Request) { + mux.HandleFunc("/api/events/audit", func(w http.ResponseWriter, r *http.Request) { retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) w.WriteHeader(400) _, err := w.Write(retBytes) require.NoError(t, err) }) - ret, err := c.Events.List(context.Background()) + ret, err := c.Events.ListAuditEvents(context.Background()) assert.Error(t, err) assert.Equal(t, "No", err.Error()) assert.Empty(t, ret) }) } +func TestEvents_ListNetworkTrafficEvents_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/events/network-traffic", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "1", r.URL.Query().Get("page")) + assert.Equal(t, "50", r.URL.Query().Get("page_size")) + retBytes, _ := json.Marshal(testNetworkTrafficResponse) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Events.ListNetworkTrafficEvents(context.Background(), + rest.NetworkTrafficPage(1), + rest.NetworkTrafficPageSize(50), + ) + require.NoError(t, err) + assert.Equal(t, testNetworkTrafficResponse, *ret) + }) +} + +func TestEvents_ListNetworkTrafficEvents_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/events/network-traffic", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Events.ListNetworkTrafficEvents(context.Background()) + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Nil(t, ret) + }) +} + func TestEvents_Integration(t *testing.T) { withBlackBoxServer(t, func(c *rest.Client) { // Do something that would trigger any event @@ -62,7 +101,7 @@ func TestEvents_Integration(t *testing.T) { }) require.NoError(t, err) - events, err := c.Events.List(context.Background()) + events, err := c.Events.ListAuditEvents(context.Background()) require.NoError(t, err) assert.NotEmpty(t, events) }) diff --git a/shared/management/client/rest/identity_providers_test.go b/shared/management/client/rest/identity_providers_test.go new file mode 100644 index 000000000..e6edab549 --- /dev/null +++ b/shared/management/client/rest/identity_providers_test.go @@ -0,0 +1,183 @@ +//go:build integration + +package rest_test + +import ( + "context" + "encoding/json" + "io" + "net/http" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/netbirdio/netbird/shared/management/client/rest" + "github.com/netbirdio/netbird/shared/management/http/api" + "github.com/netbirdio/netbird/shared/management/http/util" +) + +var testIdentityProvider = api.IdentityProvider{ + ClientId: "test-client-id", + Id: ptr("Test"), +} + +func TestIdentityProviders_List_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/identity-providers", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal([]api.IdentityProvider{testIdentityProvider}) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.IdentityProviders.List(context.Background()) + require.NoError(t, err) + assert.Len(t, ret, 1) + assert.Equal(t, testIdentityProvider, ret[0]) + }) +} + +func TestIdentityProviders_List_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/identity-providers", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.IdentityProviders.List(context.Background()) + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Empty(t, ret) + }) +} + +func TestIdentityProviders_Get_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/identity-providers/Test", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(testIdentityProvider) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.IdentityProviders.Get(context.Background(), "Test") + require.NoError(t, err) + assert.Equal(t, testIdentityProvider, *ret) + }) +} + +func TestIdentityProviders_Get_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/identity-providers/Test", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.IdentityProviders.Get(context.Background(), "Test") + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Empty(t, ret) + }) +} + +func TestIdentityProviders_Create_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/identity-providers", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "POST", r.Method) + reqBytes, err := io.ReadAll(r.Body) + require.NoError(t, err) + var req api.PostApiIdentityProvidersJSONRequestBody + err = json.Unmarshal(reqBytes, &req) + require.NoError(t, err) + assert.Equal(t, "new-client-id", req.ClientId) + retBytes, _ := json.Marshal(testIdentityProvider) + _, err = w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.IdentityProviders.Create(context.Background(), api.PostApiIdentityProvidersJSONRequestBody{ + ClientId: "new-client-id", + }) + require.NoError(t, err) + assert.Equal(t, testIdentityProvider, *ret) + }) +} + +func TestIdentityProviders_Create_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/identity-providers", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.IdentityProviders.Create(context.Background(), api.PostApiIdentityProvidersJSONRequestBody{ + ClientId: "new-client-id", + }) + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Nil(t, ret) + }) +} + +func TestIdentityProviders_Update_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/identity-providers/Test", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "PUT", r.Method) + reqBytes, err := io.ReadAll(r.Body) + require.NoError(t, err) + var req api.PutApiIdentityProvidersIdpIdJSONRequestBody + err = json.Unmarshal(reqBytes, &req) + require.NoError(t, err) + assert.Equal(t, "updated-client-id", req.ClientId) + retBytes, _ := json.Marshal(testIdentityProvider) + _, err = w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.IdentityProviders.Update(context.Background(), "Test", api.PutApiIdentityProvidersIdpIdJSONRequestBody{ + ClientId: "updated-client-id", + }) + require.NoError(t, err) + assert.Equal(t, testIdentityProvider, *ret) + }) +} + +func TestIdentityProviders_Update_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/identity-providers/Test", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.IdentityProviders.Update(context.Background(), "Test", api.PutApiIdentityProvidersIdpIdJSONRequestBody{ + ClientId: "updated-client-id", + }) + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Nil(t, ret) + }) +} + +func TestIdentityProviders_Delete_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/identity-providers/Test", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "DELETE", r.Method) + w.WriteHeader(200) + }) + err := c.IdentityProviders.Delete(context.Background(), "Test") + require.NoError(t, err) + }) +} + +func TestIdentityProviders_Delete_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/identity-providers/Test", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "Not found", Code: 404}) + w.WriteHeader(404) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + err := c.IdentityProviders.Delete(context.Background(), "Test") + assert.Error(t, err) + assert.Equal(t, "Not found", err.Error()) + }) +} diff --git a/shared/management/client/rest/ingress_test.go b/shared/management/client/rest/ingress_test.go new file mode 100644 index 000000000..c915db094 --- /dev/null +++ b/shared/management/client/rest/ingress_test.go @@ -0,0 +1,184 @@ +//go:build integration + +package rest_test + +import ( + "context" + "encoding/json" + "io" + "net/http" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/netbirdio/netbird/shared/management/client/rest" + "github.com/netbirdio/netbird/shared/management/http/api" + "github.com/netbirdio/netbird/shared/management/http/util" +) + +var testIngressPeer = api.IngressPeer{ + Connected: true, + Enabled: true, + Id: "Test", +} + +func TestIngress_List_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/ingress/peers", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal([]api.IngressPeer{testIngressPeer}) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Ingress.List(context.Background()) + require.NoError(t, err) + assert.Len(t, ret, 1) + assert.Equal(t, testIngressPeer, ret[0]) + }) +} + +func TestIngress_List_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/ingress/peers", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Ingress.List(context.Background()) + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Empty(t, ret) + }) +} + +func TestIngress_Get_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/ingress/peers/Test", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(testIngressPeer) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Ingress.Get(context.Background(), "Test") + require.NoError(t, err) + assert.Equal(t, testIngressPeer, *ret) + }) +} + +func TestIngress_Get_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/ingress/peers/Test", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Ingress.Get(context.Background(), "Test") + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Empty(t, ret) + }) +} + +func TestIngress_Create_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/ingress/peers", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "POST", r.Method) + reqBytes, err := io.ReadAll(r.Body) + require.NoError(t, err) + var req api.PostApiIngressPeersJSONRequestBody + err = json.Unmarshal(reqBytes, &req) + require.NoError(t, err) + assert.Equal(t, "peer-id", req.PeerId) + retBytes, _ := json.Marshal(testIngressPeer) + _, err = w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Ingress.Create(context.Background(), api.PostApiIngressPeersJSONRequestBody{ + PeerId: "peer-id", + }) + require.NoError(t, err) + assert.Equal(t, testIngressPeer, *ret) + }) +} + +func TestIngress_Create_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/ingress/peers", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Ingress.Create(context.Background(), api.PostApiIngressPeersJSONRequestBody{ + PeerId: "peer-id", + }) + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Nil(t, ret) + }) +} + +func TestIngress_Update_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/ingress/peers/Test", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "PUT", r.Method) + reqBytes, err := io.ReadAll(r.Body) + require.NoError(t, err) + var req api.PutApiIngressPeersIngressPeerIdJSONRequestBody + err = json.Unmarshal(reqBytes, &req) + require.NoError(t, err) + assert.Equal(t, true, req.Enabled) + retBytes, _ := json.Marshal(testIngressPeer) + _, err = w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Ingress.Update(context.Background(), "Test", api.PutApiIngressPeersIngressPeerIdJSONRequestBody{ + Enabled: true, + }) + require.NoError(t, err) + assert.Equal(t, testIngressPeer, *ret) + }) +} + +func TestIngress_Update_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/ingress/peers/Test", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Ingress.Update(context.Background(), "Test", api.PutApiIngressPeersIngressPeerIdJSONRequestBody{ + Enabled: true, + }) + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Nil(t, ret) + }) +} + +func TestIngress_Delete_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/ingress/peers/Test", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "DELETE", r.Method) + w.WriteHeader(200) + }) + err := c.Ingress.Delete(context.Background(), "Test") + require.NoError(t, err) + }) +} + +func TestIngress_Delete_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/ingress/peers/Test", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "Not found", Code: 404}) + w.WriteHeader(404) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + err := c.Ingress.Delete(context.Background(), "Test") + assert.Error(t, err) + assert.Equal(t, "Not found", err.Error()) + }) +} diff --git a/shared/management/client/rest/instance_test.go b/shared/management/client/rest/instance_test.go new file mode 100644 index 000000000..52125838d --- /dev/null +++ b/shared/management/client/rest/instance_test.go @@ -0,0 +1,96 @@ +//go:build integration + +package rest_test + +import ( + "context" + "encoding/json" + "io" + "net/http" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/netbirdio/netbird/shared/management/client/rest" + "github.com/netbirdio/netbird/shared/management/http/api" + "github.com/netbirdio/netbird/shared/management/http/util" +) + +var ( + testInstanceStatus = api.InstanceStatus{ + SetupRequired: true, + } + + testSetupResponse = api.SetupResponse{ + Email: "admin@example.com", + UserId: "user-123", + } +) + +func TestInstance_GetStatus_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/instance", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(testInstanceStatus) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Instance.GetStatus(context.Background()) + require.NoError(t, err) + assert.Equal(t, testInstanceStatus, *ret) + }) +} + +func TestInstance_GetStatus_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/instance", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Instance.GetStatus(context.Background()) + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Empty(t, ret) + }) +} + +func TestInstance_Setup_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/setup", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "POST", r.Method) + reqBytes, err := io.ReadAll(r.Body) + require.NoError(t, err) + var req api.PostApiSetupJSONRequestBody + err = json.Unmarshal(reqBytes, &req) + require.NoError(t, err) + assert.Equal(t, "admin@example.com", req.Email) + retBytes, _ := json.Marshal(testSetupResponse) + _, err = w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Instance.Setup(context.Background(), api.PostApiSetupJSONRequestBody{ + Email: "admin@example.com", + }) + require.NoError(t, err) + assert.Equal(t, testSetupResponse, *ret) + }) +} + +func TestInstance_Setup_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/setup", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Instance.Setup(context.Background(), api.PostApiSetupJSONRequestBody{ + Email: "admin@example.com", + }) + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Nil(t, ret) + }) +} diff --git a/shared/management/client/rest/networks_test.go b/shared/management/client/rest/networks_test.go index 2bf1a0d3b..33c9e72bb 100644 --- a/shared/management/client/rest/networks_test.go +++ b/shared/management/client/rest/networks_test.go @@ -219,6 +219,35 @@ func TestNetworks_Integration(t *testing.T) { }) } +func TestNetworks_ListAllRouters_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/networks/routers", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal([]api.NetworkRouter{testNetworkRouter}) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Networks.ListAllRouters(context.Background()) + require.NoError(t, err) + assert.Len(t, ret, 1) + assert.Equal(t, testNetworkRouter, ret[0]) + }) +} + +func TestNetworks_ListAllRouters_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/networks/routers", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Networks.ListAllRouters(context.Background()) + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Empty(t, ret) + }) +} + func TestNetworkResources_List_200(t *testing.T) { withMockClient(func(c *rest.Client, mux *http.ServeMux) { mux.HandleFunc("/api/networks/Meow/resources", func(w http.ResponseWriter, r *http.Request) { diff --git a/shared/management/client/rest/peers_test.go b/shared/management/client/rest/peers_test.go index c464de7ed..5724b57f9 100644 --- a/shared/management/client/rest/peers_test.go +++ b/shared/management/client/rest/peers_test.go @@ -25,6 +25,21 @@ var ( DnsLabel: "test", Id: "Test", } + + testPeerTemporaryAccess = api.PeerTemporaryAccessResponse{ + Id: "Test", + Name: "test-peer", + } + + testIngressPortAllocation = api.IngressPortAllocation{ + Enabled: true, + Id: "alloc-1", + } + + testJobResponse = api.JobResponse{ + Id: "job-1", + Status: "pending", + } ) func TestPeers_List_200(t *testing.T) { @@ -177,6 +192,264 @@ func TestPeers_ListAccessiblePeers_Err(t *testing.T) { }) } +func TestPeers_CreateTemporaryAccess_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/peers/Test/temporary-access", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "POST", r.Method) + retBytes, _ := json.Marshal(testPeerTemporaryAccess) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Peers.CreateTemporaryAccess(context.Background(), "Test", api.PostApiPeersPeerIdTemporaryAccessJSONRequestBody{}) + require.NoError(t, err) + assert.Equal(t, testPeerTemporaryAccess, *ret) + }) +} + +func TestPeers_CreateTemporaryAccess_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/peers/Test/temporary-access", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Peers.CreateTemporaryAccess(context.Background(), "Test", api.PostApiPeersPeerIdTemporaryAccessJSONRequestBody{}) + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Nil(t, ret) + }) +} + +func TestPeerIngressPorts_List_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/peers/Test/ingress/ports", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal([]api.IngressPortAllocation{testIngressPortAllocation}) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Peers.IngressPorts("Test").List(context.Background()) + require.NoError(t, err) + assert.Len(t, ret, 1) + assert.Equal(t, testIngressPortAllocation, ret[0]) + }) +} + +func TestPeerIngressPorts_List_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/peers/Test/ingress/ports", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Peers.IngressPorts("Test").List(context.Background()) + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Empty(t, ret) + }) +} + +func TestPeerIngressPorts_Get_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/peers/Test/ingress/ports/alloc-1", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(testIngressPortAllocation) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Peers.IngressPorts("Test").Get(context.Background(), "alloc-1") + require.NoError(t, err) + assert.Equal(t, testIngressPortAllocation, *ret) + }) +} + +func TestPeerIngressPorts_Get_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/peers/Test/ingress/ports/alloc-1", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Peers.IngressPorts("Test").Get(context.Background(), "alloc-1") + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Empty(t, ret) + }) +} + +func TestPeerIngressPorts_Create_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/peers/Test/ingress/ports", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "POST", r.Method) + retBytes, _ := json.Marshal(testIngressPortAllocation) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Peers.IngressPorts("Test").Create(context.Background(), api.PostApiPeersPeerIdIngressPortsJSONRequestBody{}) + require.NoError(t, err) + assert.Equal(t, testIngressPortAllocation, *ret) + }) +} + +func TestPeerIngressPorts_Create_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/peers/Test/ingress/ports", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Peers.IngressPorts("Test").Create(context.Background(), api.PostApiPeersPeerIdIngressPortsJSONRequestBody{}) + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Nil(t, ret) + }) +} + +func TestPeerIngressPorts_Update_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/peers/Test/ingress/ports/alloc-1", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "PUT", r.Method) + retBytes, _ := json.Marshal(testIngressPortAllocation) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Peers.IngressPorts("Test").Update(context.Background(), "alloc-1", api.PutApiPeersPeerIdIngressPortsAllocationIdJSONRequestBody{}) + require.NoError(t, err) + assert.Equal(t, testIngressPortAllocation, *ret) + }) +} + +func TestPeerIngressPorts_Update_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/peers/Test/ingress/ports/alloc-1", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Peers.IngressPorts("Test").Update(context.Background(), "alloc-1", api.PutApiPeersPeerIdIngressPortsAllocationIdJSONRequestBody{}) + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Nil(t, ret) + }) +} + +func TestPeerIngressPorts_Delete_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/peers/Test/ingress/ports/alloc-1", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "DELETE", r.Method) + w.WriteHeader(200) + }) + err := c.Peers.IngressPorts("Test").Delete(context.Background(), "alloc-1") + require.NoError(t, err) + }) +} + +func TestPeerIngressPorts_Delete_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/peers/Test/ingress/ports/alloc-1", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "Not found", Code: 404}) + w.WriteHeader(404) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + err := c.Peers.IngressPorts("Test").Delete(context.Background(), "alloc-1") + assert.Error(t, err) + assert.Equal(t, "Not found", err.Error()) + }) +} + +func TestPeerJobs_List_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/peers/Test/jobs", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal([]api.JobResponse{testJobResponse}) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Peers.Jobs("Test").List(context.Background()) + require.NoError(t, err) + assert.Len(t, ret, 1) + assert.Equal(t, testJobResponse.Id, ret[0].Id) + assert.Equal(t, testJobResponse.Status, ret[0].Status) + }) +} + +func TestPeerJobs_List_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/peers/Test/jobs", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Peers.Jobs("Test").List(context.Background()) + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Empty(t, ret) + }) +} + +func TestPeerJobs_Get_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/peers/Test/jobs/job-1", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(testJobResponse) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Peers.Jobs("Test").Get(context.Background(), "job-1") + require.NoError(t, err) + assert.Equal(t, testJobResponse.Id, ret.Id) + assert.Equal(t, testJobResponse.Status, ret.Status) + }) +} + +func TestPeerJobs_Get_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/peers/Test/jobs/job-1", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Peers.Jobs("Test").Get(context.Background(), "job-1") + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Empty(t, ret) + }) +} + +func TestPeerJobs_Create_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/peers/Test/jobs", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "POST", r.Method) + retBytes, _ := json.Marshal(testJobResponse) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Peers.Jobs("Test").Create(context.Background(), api.PostApiPeersPeerIdJobsJSONRequestBody{}) + require.NoError(t, err) + assert.Equal(t, testJobResponse.Id, ret.Id) + assert.Equal(t, testJobResponse.Status, ret.Status) + }) +} + +func TestPeerJobs_Create_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/peers/Test/jobs", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Peers.Jobs("Test").Create(context.Background(), api.PostApiPeersPeerIdJobsJSONRequestBody{}) + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Nil(t, ret) + }) +} + func TestPeers_Integration(t *testing.T) { withBlackBoxServer(t, func(c *rest.Client) { peers, err := c.Peers.List(context.Background()) diff --git a/shared/management/client/rest/users_test.go b/shared/management/client/rest/users_test.go index 68815d4f9..66690833a 100644 --- a/shared/management/client/rest/users_test.go +++ b/shared/management/client/rest/users_test.go @@ -32,6 +32,23 @@ var ( Role: "user", Status: api.UserStatusActive, } + + testUserInvite = api.UserInvite{ + AutoGroups: []string{"group1"}, + Id: "invite-1", + } + + testUserInviteInfo = api.UserInviteInfo{ + Email: "invite@test.com", + } + + testUserInviteAcceptResponse = api.UserInviteAcceptResponse{ + Success: true, + } + + testUserInviteRegenerateResponse = api.UserInviteRegenerateResponse{ + InviteToken: "new-token", + } ) func TestUsers_List_200(t *testing.T) { @@ -220,6 +237,269 @@ func TestUsers_Current_Err(t *testing.T) { }) } +func TestUsers_ListInvites_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/users/invites", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal([]api.UserInvite{testUserInvite}) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Users.ListInvites(context.Background()) + require.NoError(t, err) + assert.Len(t, ret, 1) + assert.Equal(t, testUserInvite, ret[0]) + }) +} + +func TestUsers_ListInvites_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/users/invites", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Users.ListInvites(context.Background()) + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Empty(t, ret) + }) +} + +func TestUsers_CreateInvite_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/users/invites", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "POST", r.Method) + reqBytes, err := io.ReadAll(r.Body) + require.NoError(t, err) + var req api.PostApiUsersInvitesJSONRequestBody + err = json.Unmarshal(reqBytes, &req) + require.NoError(t, err) + assert.Equal(t, "invite@test.com", req.Email) + retBytes, _ := json.Marshal(testUserInvite) + _, err = w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Users.CreateInvite(context.Background(), api.PostApiUsersInvitesJSONRequestBody{ + Email: "invite@test.com", + }) + require.NoError(t, err) + assert.Equal(t, testUserInvite, *ret) + }) +} + +func TestUsers_CreateInvite_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/users/invites", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Users.CreateInvite(context.Background(), api.PostApiUsersInvitesJSONRequestBody{ + Email: "invite@test.com", + }) + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Nil(t, ret) + }) +} + +func TestUsers_DeleteInvite_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/users/invites/invite-1", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "DELETE", r.Method) + w.WriteHeader(200) + }) + err := c.Users.DeleteInvite(context.Background(), "invite-1") + require.NoError(t, err) + }) +} + +func TestUsers_DeleteInvite_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/users/invites/invite-1", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "Not found", Code: 404}) + w.WriteHeader(404) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + err := c.Users.DeleteInvite(context.Background(), "invite-1") + assert.Error(t, err) + assert.Equal(t, "Not found", err.Error()) + }) +} + +func TestUsers_RegenerateInvite_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/users/invites/invite-1/regenerate", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "POST", r.Method) + retBytes, _ := json.Marshal(testUserInviteRegenerateResponse) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Users.RegenerateInvite(context.Background(), "invite-1", api.PostApiUsersInvitesInviteIdRegenerateJSONRequestBody{}) + require.NoError(t, err) + assert.Equal(t, testUserInviteRegenerateResponse, *ret) + }) +} + +func TestUsers_RegenerateInvite_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/users/invites/invite-1/regenerate", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Users.RegenerateInvite(context.Background(), "invite-1", api.PostApiUsersInvitesInviteIdRegenerateJSONRequestBody{}) + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Nil(t, ret) + }) +} + +func TestUsers_GetInviteByToken_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/users/invites/some-token", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(testUserInviteInfo) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Users.GetInviteByToken(context.Background(), "some-token") + require.NoError(t, err) + assert.Equal(t, testUserInviteInfo, *ret) + }) +} + +func TestUsers_GetInviteByToken_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/users/invites/some-token", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Users.GetInviteByToken(context.Background(), "some-token") + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Empty(t, ret) + }) +} + +func TestUsers_AcceptInvite_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/users/invites/some-token/accept", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "POST", r.Method) + retBytes, _ := json.Marshal(testUserInviteAcceptResponse) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Users.AcceptInvite(context.Background(), "some-token", api.PostApiUsersInvitesTokenAcceptJSONRequestBody{}) + require.NoError(t, err) + assert.Equal(t, testUserInviteAcceptResponse, *ret) + }) +} + +func TestUsers_AcceptInvite_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/users/invites/some-token/accept", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Users.AcceptInvite(context.Background(), "some-token", api.PostApiUsersInvitesTokenAcceptJSONRequestBody{}) + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Nil(t, ret) + }) +} + +func TestUsers_Approve_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/users/Test/approve", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "POST", r.Method) + retBytes, _ := json.Marshal(testUser) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Users.Approve(context.Background(), "Test") + require.NoError(t, err) + assert.Equal(t, testUser, *ret) + }) +} + +func TestUsers_Approve_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/users/Test/approve", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + ret, err := c.Users.Approve(context.Background(), "Test") + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + assert.Nil(t, ret) + }) +} + +func TestUsers_ChangePassword_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/users/Test/password", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "PUT", r.Method) + reqBytes, err := io.ReadAll(r.Body) + require.NoError(t, err) + var req api.PutApiUsersUserIdPasswordJSONRequestBody + err = json.Unmarshal(reqBytes, &req) + require.NoError(t, err) + w.WriteHeader(200) + }) + err := c.Users.ChangePassword(context.Background(), "Test", api.PutApiUsersUserIdPasswordJSONRequestBody{}) + require.NoError(t, err) + }) +} + +func TestUsers_ChangePassword_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/users/Test/password", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + err := c.Users.ChangePassword(context.Background(), "Test", api.PutApiUsersUserIdPasswordJSONRequestBody{}) + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + }) +} + +func TestUsers_Reject_200(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/users/Test/reject", func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, "DELETE", r.Method) + w.WriteHeader(200) + }) + err := c.Users.Reject(context.Background(), "Test") + require.NoError(t, err) + }) +} + +func TestUsers_Reject_Err(t *testing.T) { + withMockClient(func(c *rest.Client, mux *http.ServeMux) { + mux.HandleFunc("/api/users/Test/reject", func(w http.ResponseWriter, r *http.Request) { + retBytes, _ := json.Marshal(util.ErrorResponse{Message: "No", Code: 400}) + w.WriteHeader(400) + _, err := w.Write(retBytes) + require.NoError(t, err) + }) + err := c.Users.Reject(context.Background(), "Test") + assert.Error(t, err) + assert.Equal(t, "No", err.Error()) + }) +} + func TestUsers_Integration(t *testing.T) { withBlackBoxServer(t, func(c *rest.Client) { // rest client PAT is owner's