Skip to content

Commit 3bea62b

Browse files
committed
Update model test
1 parent 62c1947 commit 3bea62b

File tree

5 files changed

+108
-122
lines changed

5 files changed

+108
-122
lines changed

internal/orchestrator/bricks/bricks.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ func (s *Service) BrickCreate(
312312
models := s.modelsIndex.GetModelsByBrick(brickInstance.ID)
313313
idx := slices.IndexFunc(models, func(m modelsindex.AIModel) bool { return m.ID == *req.Model })
314314
if idx == -1 {
315-
return fmt.Errorf("model %s does not exsist", *req.Model)
315+
return fmt.Errorf("model %s does not exist", *req.Model)
316316
}
317317
brickInstance.Model = models[idx].ID
318318
}

internal/orchestrator/bricks/bricks_test.go

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
package bricks
1717

1818
import (
19+
"errors"
20+
"slices"
1921
"testing"
2022

2123
"github.com/arduino/go-paths-helper"
@@ -24,6 +26,7 @@ import (
2426

2527
"github.com/arduino/arduino-app-cli/internal/orchestrator/app"
2628
"github.com/arduino/arduino-app-cli/internal/orchestrator/bricksindex"
29+
"github.com/arduino/arduino-app-cli/internal/orchestrator/modelsindex"
2730
)
2831

2932
func TestBrickCreate(t *testing.T) {
@@ -190,3 +193,96 @@ func TestGetBrickInstanceVariableDetails(t *testing.T) {
190193
})
191194
}
192195
}
196+
197+
func TestBrickCreateWithModulesUpdate(t *testing.T) {
198+
bricksIndex, err := bricksindex.GenerateBricksIndexFromFile(paths.New("testdata"))
199+
require.Nil(t, err)
200+
modelsIndex, err := modelsindex.GenerateModelsIndexFromFile(paths.New("testdata"))
201+
require.Nil(t, err)
202+
brickService := NewService(modelsIndex, bricksIndex, nil)
203+
model := "glass-breaking"
204+
missingModel := "missing-model"
205+
206+
tests := []struct {
207+
name string
208+
model string
209+
updateRequest BrickCreateUpdateRequest
210+
expectedErr error
211+
expectedBrickModelDescriptor string
212+
}{
213+
{
214+
name: "add a brick with a defined model to an App",
215+
model: "glass-breaking",
216+
updateRequest: BrickCreateUpdateRequest{
217+
ID: "arduino:audio_classification",
218+
Variables: nil,
219+
Model: &model,
220+
},
221+
expectedErr: nil,
222+
expectedBrickModelDescriptor: "arduino:audio_classification",
223+
},
224+
{
225+
name: "add a brick with not existent model to an App",
226+
model: "glass-breaking",
227+
updateRequest: BrickCreateUpdateRequest{
228+
ID: "arduino:audio_classification",
229+
Variables: nil,
230+
Model: &missingModel,
231+
},
232+
expectedErr: errors.New("model missing-model does not exist"),
233+
expectedBrickModelDescriptor: "arduino:audio_classification",
234+
},
235+
}
236+
237+
for _, tt := range tests {
238+
dummyApp := appDummySetup(t)
239+
t.Run(tt.name, func(t *testing.T) {
240+
241+
brickErr := brickService.BrickCreate(tt.updateRequest, f.Must(app.Load(dummyApp.String())))
242+
require.Equal(t, brickErr, tt.expectedErr)
243+
244+
after, err := app.Load(dummyApp.String())
245+
require.Nil(t, err)
246+
brickAddedToApp := slices.ContainsFunc(after.Descriptor.Bricks, func(b app.Brick) bool {
247+
return b.ID == tt.expectedBrickModelDescriptor
248+
})
249+
if brickErr != nil {
250+
require.False(t, brickAddedToApp)
251+
} else {
252+
require.True(t, brickAddedToApp)
253+
}
254+
255+
})
256+
}
257+
}
258+
259+
/*
260+
t.Run("add a brick to an App", func(t *testing.T) {
261+
dummyApp := appDummySetup(t)
262+
263+
model := "glass-breaking"
264+
req := BrickCreateUpdateRequest{
265+
ID: "arduino:audio_classification",
266+
Variables: nil,
267+
Model: &model,
268+
}
269+
270+
// act
271+
err = brickService.BrickCreate(req, f.Must(app.Load(dummyApp.String())))
272+
require.Nil(t, err)
273+
274+
// assert
275+
after, err := app.Load(dummyApp.String())
276+
require.Nil(t, err)
277+
require.Len(t, after.Descriptor.Bricks, 2)
278+
require.Equal(t, "arduino:audio_classification", after.Descriptor.Bricks[1].ID)
279+
})
280+
*/
281+
282+
func appDummySetup(t *testing.T) *paths.Path {
283+
tempDummyApp := paths.New("testdata/dummy-app.temp")
284+
err := tempDummyApp.RemoveAll()
285+
require.Nil(t, err)
286+
require.Nil(t, paths.New("testdata/dummy-app").CopyDirTo(tempDummyApp))
287+
return tempDummyApp
288+
}

internal/orchestrator/bricks/models_test.go

Lines changed: 0 additions & 96 deletions
This file was deleted.

internal/orchestrator/bricks/testdata/bricks-list.yaml

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,11 @@ bricks:
2323
mount_devices_into_container: false
2424
ports: []
2525
category: storage
26-
- id: arduino:test_brick_object_detection
27-
name: Test brick
28-
description: This is a test brick
29-
variables:
30-
- name: BRICK_VAR1
31-
description: Brick level variable
32-
- name: BRICK_VAR2
33-
default_value: Brick level var2 default value
34-
model: glass-breaking
35-
#model_configuration_variables:
36-
# - MODEL_VAR1
37-
# - MODEL_VAR2
38-
- id: arduino:test_brick_video_object_detection
39-
name: Test brick
40-
description: This is a test brick
26+
- id: arduino:audio_classification
27+
name: Audio Classification
28+
description:
29+
require_container: true
30+
require_model: true
31+
require_devices: false
32+
category: audio
33+
model_name: glass-breaking
Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,9 @@
11
models:
2-
- glass-breaking:
2+
- glass-breaking:
33
runner: brick
44
name : "Glass breaking classifier"
55
description: "A glass breaking classifier model to detect glass breaking sounds in audio recordings"
66
model_configuration:
7-
EI_AUDIO_CLASSIFICATION_MODEL: /models/ootb/ei/glass-breaking.eim
8-
MODEL_VAR2: model variable 2
7+
"EI_AUDIO_CLASSIFICATION_MODEL": "/models/ootb/ei/glass-breaking.eim"
98
bricks:
10-
- arduino:test_brick_object_detection:
11-
model_configuration:
12-
"EI_OBJ_DETECTION_MODEL": "/models/ootb/ei/lw-face-det.eim"
13-
- arduino:test_brick_video_object_detection:
14-
model_configuration:
15-
"EI_V_OBJ_DETECTION_MODEL": "/models/ootb/ei/lw-face-det.eim"
16-
9+
- arduino:audio_classification

0 commit comments

Comments
 (0)