feat: runtime manager
This commit is contained in:
@@ -269,6 +269,54 @@ func TestConstructorsBuildExpectedIntentValues(t *testing.T) {
|
||||
recipientUserIDs: []string{"user-9"},
|
||||
payloadJSON: `{"game_id":"game-1","game_name":"Nebula Clash","race_name":"Skylancer","reason":"capability_not_met"}`,
|
||||
},
|
||||
{
|
||||
name: "runtime image pull failed",
|
||||
build: func() (Intent, error) {
|
||||
return NewRuntimeImagePullFailedIntent(metadata, RuntimeImagePullFailedPayload{
|
||||
GameID: "game-1",
|
||||
ImageRef: "galaxy/game:1.4.7",
|
||||
ErrorCode: "image_pull_failed",
|
||||
ErrorMessage: "manifest unknown",
|
||||
AttemptedAtMs: 1775121700000,
|
||||
})
|
||||
},
|
||||
notificationType: NotificationTypeRuntimeImagePullFailed,
|
||||
producer: ProducerRuntimeManager,
|
||||
audienceKind: AudienceKindAdminEmail,
|
||||
payloadJSON: `{"game_id":"game-1","image_ref":"galaxy/game:1.4.7","error_code":"image_pull_failed","error_message":"manifest unknown","attempted_at_ms":1775121700000}`,
|
||||
},
|
||||
{
|
||||
name: "runtime container start failed",
|
||||
build: func() (Intent, error) {
|
||||
return NewRuntimeContainerStartFailedIntent(metadata, RuntimeContainerStartFailedPayload{
|
||||
GameID: "game-1",
|
||||
ImageRef: "galaxy/game:1.4.7",
|
||||
ErrorCode: "container_start_failed",
|
||||
ErrorMessage: "OCI runtime create failed",
|
||||
AttemptedAtMs: 1775121700001,
|
||||
})
|
||||
},
|
||||
notificationType: NotificationTypeRuntimeContainerStartFailed,
|
||||
producer: ProducerRuntimeManager,
|
||||
audienceKind: AudienceKindAdminEmail,
|
||||
payloadJSON: `{"game_id":"game-1","image_ref":"galaxy/game:1.4.7","error_code":"container_start_failed","error_message":"OCI runtime create failed","attempted_at_ms":1775121700001}`,
|
||||
},
|
||||
{
|
||||
name: "runtime start config invalid",
|
||||
build: func() (Intent, error) {
|
||||
return NewRuntimeStartConfigInvalidIntent(metadata, RuntimeStartConfigInvalidPayload{
|
||||
GameID: "game-1",
|
||||
ImageRef: "galaxy/game:1.4.7",
|
||||
ErrorCode: "start_config_invalid",
|
||||
ErrorMessage: "docker network galaxy-net not found",
|
||||
AttemptedAtMs: 1775121700002,
|
||||
})
|
||||
},
|
||||
notificationType: NotificationTypeRuntimeStartConfigInvalid,
|
||||
producer: ProducerRuntimeManager,
|
||||
audienceKind: AudienceKindAdminEmail,
|
||||
payloadJSON: `{"game_id":"game-1","image_ref":"galaxy/game:1.4.7","error_code":"start_config_invalid","error_message":"docker network galaxy-net not found","attempted_at_ms":1775121700002}`,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
@@ -335,6 +383,26 @@ func TestConstructorsRejectInvalidPayloads(t *testing.T) {
|
||||
})
|
||||
require.Error(t, err)
|
||||
require.Contains(t, err.Error(), "payload_json.turn_number must be at least 1")
|
||||
|
||||
_, err = NewRuntimeImagePullFailedIntent(defaultMetadata(), RuntimeImagePullFailedPayload{
|
||||
GameID: "game-1",
|
||||
ImageRef: "galaxy/game:1.4.7",
|
||||
ErrorCode: "",
|
||||
ErrorMessage: "manifest unknown",
|
||||
AttemptedAtMs: 1775121700000,
|
||||
})
|
||||
require.Error(t, err)
|
||||
require.Contains(t, err.Error(), "payload_json.error_code must not be empty")
|
||||
|
||||
_, err = NewRuntimeContainerStartFailedIntent(defaultMetadata(), RuntimeContainerStartFailedPayload{
|
||||
GameID: "game-1",
|
||||
ImageRef: "galaxy/game:1.4.7",
|
||||
ErrorCode: "container_start_failed",
|
||||
ErrorMessage: "OCI runtime create failed",
|
||||
AttemptedAtMs: 0,
|
||||
})
|
||||
require.Error(t, err)
|
||||
require.Contains(t, err.Error(), "payload_json.attempted_at_ms must be at least 1")
|
||||
}
|
||||
|
||||
func TestDecodeIntentRejectsMissingRequiredTopLevelField(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user