Skip to content

Commit 27b5dbe

Browse files
authored
Merge branch 'main' into redfish-firmware
2 parents db6083d + 2796e2a commit 27b5dbe

27 files changed

+4753
-46
lines changed

.github/CODEOWNERS

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# This file defines the code owners for the console repository
2+
# See https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
3+
4+
# Default owners for the entire repository
5+
* @device-management-toolkit/owner-open-amt-cloud-toolkit

Dockerfile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
#*********************************************************************
2+
# * Copyright (c) Intel Corporation 2025
3+
# * SPDX-License-Identifier: Apache-2.0
4+
# **********************************************************************
5+
16
# Step 1: Modules caching
27
FROM golang:1.25.3-alpine@sha256:aee43c3ccbf24fdffb7295693b6e33b21e01baec1b2a55acc351fde345e9ec34 AS modules
38
COPY go.mod go.sum /modules/

cmd/app/main.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,23 @@ import (
1212

1313
"github.com/device-management-toolkit/console/config"
1414
"github.com/device-management-toolkit/console/internal/app"
15+
"github.com/device-management-toolkit/console/internal/controller/openapi"
16+
"github.com/device-management-toolkit/console/internal/usecase"
17+
"github.com/device-management-toolkit/console/pkg/logger"
1518
)
1619

1720
// Function pointers for better testability.
1821
var (
1922
initializeConfigFunc = config.NewConfig
2023
initializeAppFunc = app.Init
2124
runAppFunc = app.Run
25+
// NewGeneratorFunc allows tests to inject a fake OpenAPI generator.
26+
NewGeneratorFunc = func(u usecase.Usecases, l logger.Interface) interface {
27+
GenerateSpec() ([]byte, error)
28+
SaveSpec([]byte, string) error
29+
} {
30+
return openapi.NewGenerator(u, l)
31+
}
2232
)
2333

2434
func main() {
@@ -41,11 +51,39 @@ func main() {
4151
panic(browserError)
4252
}
4353
}()
54+
} else {
55+
err = handleOpenAPIGeneration()
56+
if err != nil {
57+
log.Fatalf("Failed to generate OpenAPI spec: %s", err)
58+
}
4459
}
4560

4661
runAppFunc(cfg)
4762
}
4863

64+
func handleOpenAPIGeneration() error {
65+
l := logger.New("info")
66+
usecases := usecase.Usecases{}
67+
68+
// Create OpenAPI generator
69+
generator := NewGeneratorFunc(usecases, l)
70+
71+
// Generate specification
72+
spec, err := generator.GenerateSpec()
73+
if err != nil {
74+
return err
75+
}
76+
77+
// Save to file
78+
if err := generator.SaveSpec(spec, "doc/openapi.json"); err != nil {
79+
return err
80+
}
81+
82+
log.Println("OpenAPI specification generated at doc/openapi.json")
83+
84+
return nil
85+
}
86+
4987
func handleEncryptionKey(cfg *config.Config) {
5088
toolkitCrypto := security.Crypto{}
5189

cmd/app/main_test.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88
"github.com/stretchr/testify/mock"
99

1010
"github.com/device-management-toolkit/console/config"
11+
"github.com/device-management-toolkit/console/internal/usecase"
12+
"github.com/device-management-toolkit/console/pkg/logger"
1113
)
1214

1315
type MockCommandExecutor struct {
@@ -70,3 +72,66 @@ func TestOpenBrowserLinux(t *testing.T) { //nolint:paralleltest // cannot have s
7072
assert.NoError(t, err)
7173
mockCmdExecutor.AssertExpectations(t)
7274
}
75+
76+
type MockGenerator struct {
77+
mock.Mock
78+
}
79+
80+
func (m *MockGenerator) GenerateSpec() ([]byte, error) {
81+
args := m.Called()
82+
83+
var b []byte
84+
if v := args.Get(0); v != nil {
85+
if bb, ok := v.([]byte); ok {
86+
b = bb
87+
}
88+
}
89+
90+
return b, args.Error(1)
91+
}
92+
93+
func (m *MockGenerator) SaveSpec(b []byte, path string) error {
94+
args := m.Called(b, path)
95+
96+
return args.Error(0)
97+
}
98+
99+
//nolint:paralleltest // modifies package-level NewGeneratorFunc
100+
func TestHandleOpenAPIGeneration_Success(t *testing.T) {
101+
mockGen := new(MockGenerator)
102+
103+
NewGeneratorFunc = func(_ usecase.Usecases, _ logger.Interface) interface {
104+
GenerateSpec() ([]byte, error)
105+
SaveSpec([]byte, string) error
106+
} {
107+
return mockGen
108+
}
109+
110+
expectedSpec := []byte("{}")
111+
mockGen.On("GenerateSpec").Return(expectedSpec, nil)
112+
mockGen.On("SaveSpec", expectedSpec, "doc/openapi.json").Return(nil)
113+
114+
err := handleOpenAPIGeneration()
115+
assert.NoError(t, err)
116+
117+
mockGen.AssertExpectations(t)
118+
}
119+
120+
//nolint:paralleltest // modifies package-level NewGeneratorFunc
121+
func TestHandleOpenAPIGeneration_GenerateFails(t *testing.T) {
122+
mockGen := new(MockGenerator)
123+
124+
NewGeneratorFunc = func(_ usecase.Usecases, _ logger.Interface) interface {
125+
GenerateSpec() ([]byte, error)
126+
SaveSpec([]byte, string) error
127+
} {
128+
return mockGen
129+
}
130+
131+
mockGen.On("GenerateSpec").Return([]byte(nil), assert.AnError)
132+
133+
err := handleOpenAPIGeneration()
134+
assert.Error(t, err)
135+
136+
mockGen.AssertExpectations(t)
137+
}

0 commit comments

Comments
 (0)