Skip to content

Commit

Permalink
Merge branch 'master' into tls_cert
Browse files Browse the repository at this point in the history
  • Loading branch information
RipulHandoo committed Nov 10, 2023
2 parents adf9e73 + 2c5557a commit 51d4986
Show file tree
Hide file tree
Showing 21 changed files with 872 additions and 114 deletions.
21 changes: 21 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
version: 2
updates:
- package-ecosystem: "gomod"
directory: "chaoscenter/authentication"
schedule:
interval: "daily"

- package-ecosystem: "gomod"
directory: "chaoscenter/event-tracker"
schedule:
interval: "daily"

- package-ecosystem: "gomod"
directory: "chaoscenter/subscriber"
schedule:
interval: "daily"

- package-ecosystem: "gomod"
directory: "chaoscenter/graphql"
schedule:
interval: "daily"
49 changes: 33 additions & 16 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -82,22 +82,39 @@ jobs:
cd chaoscenter
make frontend-services-checks
# backend-unit-tests:
# runs-on: ubuntu-latest
# needs:
# - changes
# - backend-checks
# steps:
# - name: Checkout repository
# uses: actions/checkout@v2
# - uses: actions/setup-go@v2
# with:
# go-version: "1.20" # By default, the go version is v1.15 in runner.
# - name: Backend unit tests
# shell: bash
# run: |
# cd chaoscenter
# make unit-tests
backend-unit-tests:
runs-on: ubuntu-latest
needs:
- changes
- backend-checks
steps:
- name: Checkout repository
uses: actions/checkout@v2
- uses: actions/setup-go@v2
with:
go-version: "1.20" # By default, the go version is v1.15 in runner.
- name: Backend unit tests
shell: bash
run: |
cd chaoscenter
make backend-unit-tests
web-unit-tests:
runs-on: ubuntu-latest
needs:
- changes
- frontend-checks
steps:
- name: Checkout repository
uses: actions/checkout@v2
- uses: actions/setup-node@v3
with:
node-version: 16
- name: Chaoscenter web unit tests
shell: bash
run: |
cd chaoscenter
make web-unit-tests
docker-build-graphql-server:
runs-on: ubuntu-latest
Expand Down
16 changes: 11 additions & 5 deletions chaoscenter/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -97,15 +97,21 @@ backend-services-checks:
# && exit 1; \
# fi

unit-tests:
backend-unit-tests:
@echo "------------------"
@echo "--> Running unit tests"
@echo "--> Running backend unit tests"
@echo "------------------"
@cd graphql-server && go test -cover ./...
# @cd authentication && go test -v ./...
# @cd cluster-agents/subscriber && go test -v ./...
@cd graphql/server && go test -cover ./...
@cd authentication && go test -v ./...
@#cd cluster-agents/subscriber && go test -v ./...
# @cd cluster-agents/event-tracker && go test -v ./...

web-unit-tests:
@echo "------------------"
@echo "--> Running frontend unit tests"
@echo "------------------"
@cd web && yarn -s && yarn test --coverage

.PHONY: docker.buildx
docker.buildx:
@echo "------------------------------"
Expand Down
168 changes: 168 additions & 0 deletions chaoscenter/authentication/api/handlers/grpc/grpc_handler_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
package grpc_test

import (
"context"
"errors"
"testing"

"github.com/litmuschaos/litmus/chaoscenter/authentication/api/handlers/grpc"
"github.com/litmuschaos/litmus/chaoscenter/authentication/api/mocks"
"github.com/litmuschaos/litmus/chaoscenter/authentication/api/presenter/protos"
"github.com/litmuschaos/litmus/chaoscenter/authentication/pkg/entities"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
)

func TestGetProjectById(t *testing.T) {
testCases := []struct {
name string
projectID string
mockGetProjectResponse *entities.Project
mockGetProjectError error
mockFindUsersResponse *[]entities.User
mockFindUsersError error
expectedResponse *protos.GetProjectByIdResponse
expectedError bool
}{
{
name: "PositiveTestProjectExists",
projectID: "project-id",
mockGetProjectResponse: &entities.Project{
ID: "project-id",
Name: "test-project",
Members: []*entities.Member{
{
UserID: "user-1",
Invitation: entities.PendingInvitation,
JoinedAt: 1234567890,
},
},
},
mockGetProjectError: nil,
mockFindUsersResponse: &[]entities.User{
{
ID: "user-1",
Email: "user1@email.com",
Username: "user1",
},
},
mockFindUsersError: nil,
expectedResponse: &protos.GetProjectByIdResponse{
Id: "project-id",
Name: "test-project",
},
expectedError: false,
},
{
name: "NegativeTestProjectDoesNotExist",
projectID: "non-existing-project-id",
mockGetProjectResponse: nil,
mockGetProjectError: errors.New("project not found"),
mockFindUsersResponse: nil,
mockFindUsersError: nil,
expectedResponse: nil,
expectedError: true,
},
}

s := &grpc.ServerGrpc{
ApplicationService: &mocks.MockedApplicationService{},
}

for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
ctx := context.Background()

mockService := s.ApplicationService.(*mocks.MockedApplicationService)
mockService.On("GetProjectByProjectID", tc.projectID).Return(tc.mockGetProjectResponse, tc.mockGetProjectError)
if tc.mockFindUsersResponse != nil {
mockService.On("FindUsersByUID", mock.Anything).Return(tc.mockFindUsersResponse, tc.mockFindUsersError)
}

req := &protos.GetProjectByIdRequest{
ProjectID: tc.projectID,
}

resp, err := s.GetProjectById(ctx, req)

if tc.expectedError {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.NotNil(t, resp)
assert.Equal(t, tc.expectedResponse.Name, resp.Name)
}
mockService.AssertExpectations(t)
})
}
}

func TestGetUserById(t *testing.T) {
testcases := []struct {
name string
userID string
mockServiceResponse *entities.User
mockServiceError error
expectedResponse *protos.GetUserByIdResponse
expectedError bool
}{
{
name: "PositiveTestUserExists",
userID: "user-id",
mockServiceResponse: &entities.User{
ID: "user-id",
Name: "test-user",
Username: "username",
DeactivatedAt: nil,
Role: "admin",
Email: "user@email.com",
},
mockServiceError: nil,
expectedResponse: &protos.GetUserByIdResponse{
Id: "user-id",
Name: "test-user",
Email: "user@email.com",
DeactivatedAt: "nil",
},
expectedError: false,
},
{
name: "NegativeTestUserDoesNotExist",
userID: "non-existing-user-id",
mockServiceResponse: nil,
mockServiceError: errors.New("user not found"),
expectedResponse: nil,
expectedError: true,
},
}

s := &grpc.ServerGrpc{
ApplicationService: &mocks.MockedApplicationService{},
}

for _, tc := range testcases {
t.Run(tc.name, func(t *testing.T) {
ctx := context.Background()

mockService := s.ApplicationService.(*mocks.MockedApplicationService)
mockService.On("GetUser", tc.userID).Return(tc.mockServiceResponse, tc.mockServiceError)

req := &protos.GetUserByIdRequest{
UserID: tc.userID,
}

resp, err := s.GetUserById(ctx, req)

if tc.expectedError {
assert.Error(t, err)
} else {
assert.NoError(t, err)
assert.NotNil(t, resp)
assert.Equal(t, tc.expectedResponse.Name, resp.Name)
assert.Equal(t, tc.expectedResponse.Email, resp.Email)
}

mockService.AssertExpectations(t)
})
}
}
38 changes: 38 additions & 0 deletions chaoscenter/authentication/api/mocks/grpc_mocks.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package mocks

import (
"context"

"github.com/litmuschaos/litmus/chaoscenter/authentication/api/presenter/protos"
"github.com/stretchr/testify/mock"
"google.golang.org/grpc"
)

// ServerGrpc is a mock type for the ServerGrpc type
type MockAuthRpcServiceClient struct {
mock.Mock
}

func (m *MockAuthRpcServiceClient) ValidateRequest(ctx context.Context, in *protos.ValidationRequest, opts ...grpc.CallOption) (*protos.ValidationResponse, error) {
args := m.Called(ctx, in, opts)
if vr, ok := args.Get(0).(*protos.ValidationResponse); ok {
return vr, args.Error(1)
}
return nil, args.Error(1)
}

func (m *MockAuthRpcServiceClient) GetProjectById(ctx context.Context, in *protos.GetProjectByIdRequest, opts ...grpc.CallOption) (*protos.GetProjectByIdResponse, error) {
args := m.Called(ctx, in, opts)
if gpir, ok := args.Get(0).(*protos.GetProjectByIdResponse); ok {
return gpir, args.Error(1)
}
return nil, args.Error(1)
}

func (m *MockAuthRpcServiceClient) GetUserById(ctx context.Context, in *protos.GetUserByIdRequest, opts ...grpc.CallOption) (*protos.GetUserByIdResponse, error) {
args := m.Called(ctx, in, opts)
if guir, ok := args.Get(0).(*protos.GetUserByIdResponse); ok {
return guir, args.Error(1)
}
return nil, args.Error(1)
}
Loading

0 comments on commit 51d4986

Please sign in to comment.