diff --git a/chaoscenter/graphql/server/go.mod b/chaoscenter/graphql/server/go.mod index 41134b1053f..80fbb615243 100644 --- a/chaoscenter/graphql/server/go.mod +++ b/chaoscenter/graphql/server/go.mod @@ -4,6 +4,7 @@ go 1.20 require ( github.com/99designs/gqlgen v0.17.42 + github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 github.com/argoproj/argo-workflows/v3 v3.3.1 github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 github.com/gin-contrib/cors v1.3.1 diff --git a/chaoscenter/graphql/server/go.sum b/chaoscenter/graphql/server/go.sum index db42a522707..63277f3f4cf 100644 --- a/chaoscenter/graphql/server/go.sum +++ b/chaoscenter/graphql/server/go.sum @@ -43,6 +43,8 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/99designs/gqlgen v0.17.42 h1:BVWDOb2VVHQC5k3m6oa0XhDnxltLLrU4so7x/u39Zu4= github.com/99designs/gqlgen v0.17.42/go.mod h1:GQ6SyMhwFbgHR0a8r2Wn8fYgEwPxxmndLFPhU63+cJE= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= github.com/Azure/azure-sdk-for-go v32.5.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v35.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v43.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= diff --git a/chaoscenter/graphql/server/pkg/environment/handler/handler_fuzz_test.go b/chaoscenter/graphql/server/pkg/environment/handler/handler_fuzz_test.go new file mode 100644 index 00000000000..a3f705faa29 --- /dev/null +++ b/chaoscenter/graphql/server/pkg/environment/handler/handler_fuzz_test.go @@ -0,0 +1,126 @@ +package handler + +import ( + "context" + "testing" + + fuzz "github.com/AdaLogics/go-fuzz-headers" + "github.com/litmuschaos/litmus/chaoscenter/graphql/server/graph/model" + "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/authorization" + "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb" + "github.com/litmuschaos/litmus/chaoscenter/graphql/server/utils" + "github.com/sirupsen/logrus" + "github.com/stretchr/testify/mock" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo" +) + +func FuzzCreateEnvironment(f *testing.F) { + utils.Config.JwtSecret = JwtSecret + f.Fuzz(func(t *testing.T, data []byte) { + fuzzConsumer := fuzz.NewConsumer(data) + targetStruct := &struct { + input model.CreateEnvironmentRequest + projectID string + }{} + err := fuzzConsumer.GenerateStruct(targetStruct) + if err != nil { + return + } + mongodbMockOperator.On("Create", mock.Anything, mongodb.EnvironmentCollection, mock.Anything).Return(nil).Once() + token, err := GetSignedJWT("testUser") + if err != nil { + logrus.Errorf("Error genrating token %v", err) + } + + ctx := context.WithValue(context.Background(), authorization.AuthKey, token) + service := NewEnvironmentService(environmentOperator) + + env, err := service.CreateEnvironment(ctx, targetStruct.projectID, &targetStruct.input) + if err != nil { + t.Errorf("Unexpected error: %v", err) + } + if env == nil { + t.Errorf("Returned environment is nil") + } + }) +} + +func FuzzTestDeleteEnvironment(f *testing.F) { + utils.Config.JwtSecret = JwtSecret + testCases := []struct { + projectID string + environmentID string + }{ + { + projectID: "testProject", + environmentID: "testEnvID", + }, + } + for _, tc := range testCases { + f.Add(tc.projectID, tc.environmentID) + } + + f.Fuzz(func(t *testing.T, projectID string, environmentID string) { + + findResult := []interface{}{bson.D{ + {Key: "environment_id", Value: environmentID}, + {Key: "project_id", Value: projectID}, + }} + singleResult := mongo.NewSingleResultFromDocument(findResult[0], nil, nil) + mongodbMockOperator.On("Get", mock.Anything, mongodb.EnvironmentCollection, mock.Anything).Return(singleResult, nil).Once() + mongodbMockOperator.On("UpdateMany", mock.Anything, mongodb.EnvironmentCollection, mock.Anything, mock.Anything, mock.Anything).Return(&mongo.UpdateResult{}, nil).Once() + token, err := GetSignedJWT("testUser") + if err != nil { + logrus.Errorf("Error genrating token %v", err) + } + + ctx := context.WithValue(context.Background(), authorization.AuthKey, token) + service := NewEnvironmentService(environmentOperator) + + env, err := service.DeleteEnvironment(ctx, projectID, environmentID) + if err != nil { + t.Errorf("Unexpected error: %v", err) + } + + if env == "" { + t.Errorf("Returned environment is nil") + } + }) +} + +func FuzzTestGetEnvironment(f *testing.F) { + utils.Config.JwtSecret = JwtSecret + testCases := []struct { + projectID string + environmentID string + }{ + { + projectID: "testProject", + environmentID: "testEnvID", + }, + } + for _, tc := range testCases { + f.Add(tc.projectID, tc.environmentID) + } + + f.Fuzz(func(t *testing.T, projectID string, environmentID string) { + + findResult := []interface{}{bson.D{ + {Key: "environment_id", Value: environmentID}, + {Key: "project_id", Value: projectID}, + }} + singleResult := mongo.NewSingleResultFromDocument(findResult[0], nil, nil) + mongodbMockOperator.On("Get", mock.Anything, mongodb.EnvironmentCollection, mock.Anything).Return(singleResult, nil).Once() + service := NewEnvironmentService(environmentOperator) + + env, err := service.GetEnvironment(projectID, environmentID) + if err != nil { + t.Errorf("Unexpected error: %v", err) + } + + if env == nil { + t.Errorf("Returned environment is nil") + } + }) +} diff --git a/chaoscenter/graphql/server/pkg/environment/handler/handler_test.go b/chaoscenter/graphql/server/pkg/environment/handler/handler_test.go index 2231ee6ca8c..15f29ecf328 100644 --- a/chaoscenter/graphql/server/pkg/environment/handler/handler_test.go +++ b/chaoscenter/graphql/server/pkg/environment/handler/handler_test.go @@ -6,9 +6,6 @@ import ( "testing" "time" - "github.com/litmuschaos/litmus/chaoscenter/graphql/server/pkg/database/mongodb" - "go.mongodb.org/mongo-driver/mongo" - "github.com/golang-jwt/jwt" "github.com/google/uuid" "github.com/litmuschaos/litmus/chaoscenter/graphql/server/graph/model" @@ -26,9 +23,9 @@ var ( environmentOperator = dbOperationsEnvironment.NewEnvironmentOperator(mongodbMockOperator) ) -const JwtSecret = "testsecret" +var JwtSecret = "testsecret" -func getSignedJWT(name string) (string, error) { +func GetSignedJWT(name string) (string, error) { token := jwt.New(jwt.SigningMethodHS512) claims := token.Claims.(jwt.MapClaims) claims["uid"] = uuid.NewString() @@ -67,7 +64,7 @@ func TestCreateEnvironment(t *testing.T) { expectedEnv: nil, expectedErr: errors.New("invalid Token"), given: func() string { - token, err := getSignedJWT("testUser") + token, err := GetSignedJWT("testUser") if err != nil { return token } @@ -142,7 +139,7 @@ func TestDeleteEnvironment(t *testing.T) { }, expectedErr: errors.New("invalid Token"), given: func() string { - token, err := getSignedJWT("testUser") + token, err := GetSignedJWT("testUser") if err != nil { return token } @@ -187,39 +184,3 @@ func TestDeleteEnvironment(t *testing.T) { }) } } - -func FuzzTestGetEnvironment(f *testing.F) { - utils.Config.JwtSecret = JwtSecret - testCases := []struct { - projectID string - environmentID string - }{ - { - projectID: "testProject", - environmentID: "testEnvID", - }, - } - for _, tc := range testCases { - f.Add(tc.projectID, tc.environmentID) - } - - f.Fuzz(func(t *testing.T, projectID string, environmentID string) { - - findResult := []interface{}{bson.D{ - {Key: "environment_id", Value: environmentID}, - {Key: "project_id", Value: projectID}, - }} - singleResult := mongo.NewSingleResultFromDocument(findResult[0], nil, nil) - mongodbMockOperator.On("Get", mock.Anything, mongodb.EnvironmentCollection, mock.Anything).Return(singleResult, nil).Once() - service := NewEnvironmentService(environmentOperator) - - env, err := service.GetEnvironment(projectID, environmentID) - if err != nil { - t.Errorf("Unexpected error: %v", err) - } - - if env == nil { - t.Errorf("Returned environment is nil") - } - }) -} diff --git a/chaoscenter/graphql/server/pkg/environment/handler/testdata/fuzz/FuzzCreateEnvironment/582528ddfad69eb5 b/chaoscenter/graphql/server/pkg/environment/handler/testdata/fuzz/FuzzCreateEnvironment/582528ddfad69eb5 new file mode 100644 index 00000000000..a96f5599e6b --- /dev/null +++ b/chaoscenter/graphql/server/pkg/environment/handler/testdata/fuzz/FuzzCreateEnvironment/582528ddfad69eb5 @@ -0,0 +1,2 @@ +go test fuzz v1 +[]byte("0") diff --git a/chaoscenter/web/src/views/AccountSettingsUserManagement/AccountSettingsUserManagement.tsx b/chaoscenter/web/src/views/AccountSettingsUserManagement/AccountSettingsUserManagement.tsx index 40369890d16..371ac410961 100644 --- a/chaoscenter/web/src/views/AccountSettingsUserManagement/AccountSettingsUserManagement.tsx +++ b/chaoscenter/web/src/views/AccountSettingsUserManagement/AccountSettingsUserManagement.tsx @@ -106,7 +106,7 @@ function MemoizedUsersTable({ users, getUsersRefetch }: MemoizedUsersTableProps) return ( data.createdAt && ( - {getFormattedTime(data.createdAt * 1000)} + {getFormattedTime(data.createdAt)} ) ); diff --git a/chaoscenter/web/src/views/UserCreatedProjects/UserCreatedProjects.tsx b/chaoscenter/web/src/views/UserCreatedProjects/UserCreatedProjects.tsx index 6cbcedf9029..3052c3d9e5b 100644 --- a/chaoscenter/web/src/views/UserCreatedProjects/UserCreatedProjects.tsx +++ b/chaoscenter/web/src/views/UserCreatedProjects/UserCreatedProjects.tsx @@ -54,7 +54,7 @@ function MemoizedUserCreatedProjectsTable({ return ( data.updatedAt && ( - {getFormattedTime(data.updatedAt * 1000)} + {getFormattedTime(data.updatedAt)} ) );