Skip to content

Commit 3a2c699

Browse files
feat(dir): add integration tests for server
Signed-off-by: Bendegúz Csirmaz <csirmazbendeguz@gmail.com>
1 parent 594b92e commit 3a2c699

File tree

12 files changed

+1639
-36
lines changed

12 files changed

+1639
-36
lines changed

server/database/database.go

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -37,22 +37,22 @@ func New(config config.Config) (types.DatabaseAPI, error) {
3737
}
3838
}
3939

40-
func newCustomLogger() gormlogger.Interface {
41-
// Create a custom logger configuration that ignores "record not found" errors
42-
// since these are expected during normal operation (checking if records exist)
43-
return gormlogger.New(
44-
log.New(os.Stdout, "\r\n", log.LstdFlags),
45-
gormlogger.Config{
46-
SlowThreshold: 200 * time.Millisecond, //nolint:mnd
47-
LogLevel: gormlogger.Warn,
48-
IgnoreRecordNotFoundError: true,
49-
Colorful: true,
50-
},
51-
)
52-
}
53-
5440
// newPostgres creates a new database connection using PostgreSQL driver.
5541
func newPostgres(cfg config.PostgresConfig) (*gormdb.DB, error) {
42+
db, err := NewPostgresGormDb(cfg)
43+
if err != nil {
44+
return nil, fmt.Errorf("failed to connect to PostgreSQL database: %w", err)
45+
}
46+
47+
gdb, err := gormdb.New(db)
48+
if err != nil {
49+
return nil, fmt.Errorf("failed to initialize PostgreSQL database: %w", err)
50+
}
51+
52+
return gdb, nil
53+
}
54+
55+
func NewPostgresGormDb(cfg config.PostgresConfig) (*gorm.DB, error) {
5656
host := cfg.Host
5757
if host == "" {
5858
host = config.DefaultPostgresHost
@@ -76,17 +76,21 @@ func newPostgres(cfg config.PostgresConfig) (*gormdb.DB, error) {
7676
dsn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=%s",
7777
host, port, cfg.Username, cfg.Password, database, sslMode)
7878

79-
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
79+
return gorm.Open(postgres.Open(dsn), &gorm.Config{
8080
Logger: newCustomLogger(),
8181
})
82-
if err != nil {
83-
return nil, fmt.Errorf("failed to connect to PostgreSQL database: %w", err)
84-
}
85-
86-
gdb, err := gormdb.New(db)
87-
if err != nil {
88-
return nil, fmt.Errorf("failed to initialize PostgreSQL database: %w", err)
89-
}
82+
}
9083

91-
return gdb, nil
84+
func newCustomLogger() gormlogger.Interface {
85+
// Create a custom logger configuration that ignores "record not found" errors
86+
// since these are expected during normal operation (checking if records exist)
87+
return gormlogger.New(
88+
log.New(os.Stdout, "\r\n", log.LstdFlags),
89+
gormlogger.Config{
90+
SlowThreshold: 200 * time.Millisecond, //nolint:mnd
91+
LogLevel: gormlogger.Warn,
92+
IgnoreRecordNotFoundError: true,
93+
Colorful: true,
94+
},
95+
)
9296
}

server/server.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ type Server struct {
6363
authzService *authz.Service
6464
publicationService *publication.Service
6565
health *healthcheck.Checker
66-
grpcServer *grpc.Server
66+
GrpcServer *grpc.Server
6767
metricsServer *metrics.Server
6868
}
6969

@@ -114,7 +114,7 @@ func buildConnectionOptions(cfg config.ConnectionConfig) []grpc.ServerOption {
114114
func Run(ctx context.Context, cfg *config.Config) error {
115115
errCh := make(chan error)
116116

117-
server, err := New(ctx, cfg)
117+
server, err := New(ctx, cfg, nil)
118118
if err != nil {
119119
return fmt.Errorf("failed to create server: %w", err)
120120
}
@@ -153,7 +153,7 @@ func configureOASFValidation(cfg *config.Config) error {
153153
}
154154

155155
//nolint:cyclop // This function has been at the limit; refactoring is out of scope.
156-
func New(ctx context.Context, cfg *config.Config) (*Server, error) {
156+
func New(ctx context.Context, cfg *config.Config, databaseAPI types.DatabaseAPI) (*Server, error) {
157157
logger.Debug("Creating server with config", "config", cfg, "version", version.String())
158158

159159
if err := configureOASFValidation(cfg); err != nil {
@@ -227,9 +227,11 @@ func New(ctx context.Context, cfg *config.Config) (*Server, error) {
227227
return nil, fmt.Errorf("failed to create routing: %w", err)
228228
}
229229

230-
databaseAPI, err := database.New(cfg.Database)
231-
if err != nil {
232-
return nil, fmt.Errorf("failed to create database API: %w", err)
230+
if databaseAPI == nil {
231+
databaseAPI, err = database.New(cfg.Database)
232+
if err != nil {
233+
return nil, fmt.Errorf("failed to create database API: %w", err)
234+
}
233235
}
234236

235237
// Create JWT authentication service if enabled
@@ -312,7 +314,7 @@ func New(ctx context.Context, cfg *config.Config) (*Server, error) {
312314
authzService: authzService,
313315
publicationService: publicationService,
314316
health: healthChecker,
315-
grpcServer: grpcServer,
317+
GrpcServer: grpcServer,
316318
metricsServer: metricsServer,
317319
}, nil
318320
}
@@ -385,7 +387,7 @@ func (s Server) Close(ctx context.Context) {
385387
}
386388
}
387389

388-
s.grpcServer.GracefulStop()
390+
s.GrpcServer.GracefulStop()
389391
}
390392

391393
func (s Server) start(ctx context.Context) error {
@@ -428,7 +430,7 @@ func (s Server) start(ctx context.Context) error {
428430
go func() {
429431
logger.Info("Server starting", "address", s.Options().Config().ListenAddress)
430432

431-
if err := s.grpcServer.Serve(listen); err != nil {
433+
if err := s.GrpcServer.Serve(listen); err != nil {
432434
logger.Error("Failed to start server", "error", err)
433435
}
434436
}()

tests/Taskfile.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -596,3 +596,10 @@ tasks:
596596
else
597597
echo "No pods directory found"
598598
fi
599+
600+
test:integration:server:
601+
desc: Run integration tests for the API server
602+
dir: "{{ .ROOT_DIR }}/tests/integration-server"
603+
cmds:
604+
- docker compose up -d --build --wait
605+
- ginkgo --randomize-all -p

0 commit comments

Comments
 (0)