Files
herolib/lib/circles/actions/models/job_test.v
2025-03-16 08:41:45 +01:00

207 lines
5.6 KiB
V

module models
import freeflowuniverse.herolib.data.ourtime
fn test_job_serialization() {
// Create a test job
mut job := Job{
id: 1
guid: 'test-job-1'
agents: ['agent1', 'agent2']
source: 'source1'
circle: 'test-circle'
context: 'test-context'
actor: 'vm_manager'
action: 'start'
params: {
'id': '10'
'name': 'test-vm'
}
timeout_schedule: 120
timeout: 7200
log: true
ignore_error: false
ignore_error_codes: [u16(404), u16(500)]
debug: true
retry: 3
}
// Set up job status
job.status = JobStatus{
guid: job.guid
created: ourtime.now()
start: ourtime.now()
end: ourtime.OurTime{}
status: .created
}
// Add a dependency
job.dependencies << JobDependency{
guid: 'dependency-job-1'
agents: ['agent1']
}
// Test index_keys method
keys := job.index_keys()
assert keys['guid'] == 'test-job-1'
assert keys['actor'] == 'vm_manager'
assert keys['circle'] == 'test-circle'
assert keys['context'] == 'test-context'
// Serialize the job
println('Serializing job...')
serialized := job.dumps() or {
assert false, 'Failed to serialize job: ${err}'
return
}
assert serialized.len > 0, 'Serialized data should not be empty'
// Deserialize the job
println('Deserializing job...')
deserialized := job_loads(serialized) or {
assert false, 'Failed to deserialize job: ${err}'
return
}
// Verify the deserialized job
assert deserialized.id == job.id
assert deserialized.guid == job.guid
assert deserialized.agents.len == job.agents.len
assert deserialized.agents[0] == job.agents[0]
assert deserialized.agents[1] == job.agents[1]
assert deserialized.source == job.source
assert deserialized.circle == job.circle
assert deserialized.context == job.context
assert deserialized.actor == job.actor
assert deserialized.action == job.action
assert deserialized.params.len == job.params.len
assert deserialized.params['id'] == job.params['id']
assert deserialized.params['name'] == job.params['name']
assert deserialized.timeout_schedule == job.timeout_schedule
assert deserialized.timeout == job.timeout
assert deserialized.log == job.log
assert deserialized.ignore_error == job.ignore_error
assert deserialized.ignore_error_codes.len == job.ignore_error_codes.len
assert deserialized.ignore_error_codes[0] == job.ignore_error_codes[0]
assert deserialized.ignore_error_codes[1] == job.ignore_error_codes[1]
assert deserialized.debug == job.debug
assert deserialized.retry == job.retry
assert deserialized.status.guid == job.status.guid
assert deserialized.status.status == job.status.status
assert deserialized.dependencies.len == job.dependencies.len
assert deserialized.dependencies[0].guid == job.dependencies[0].guid
assert deserialized.dependencies[0].agents.len == job.dependencies[0].agents.len
assert deserialized.dependencies[0].agents[0] == job.dependencies[0].agents[0]
println('All job serialization tests passed!')
}
fn test_job_status_enum() {
// Test all status enum values
assert u8(Status.created) == 0
assert u8(Status.scheduled) == 1
assert u8(Status.planned) == 2
assert u8(Status.running) == 3
assert u8(Status.error) == 4
assert u8(Status.ok) == 5
// Test status progression
mut status := Status.created
assert status == .created
status = .scheduled
assert status == .scheduled
status = .planned
assert status == .planned
status = .running
assert status == .running
status = .error
assert status == .error
status = .ok
assert status == .ok
println('All job status enum tests passed!')
}
fn test_job_dependency() {
// Create a test dependency
mut dependency := JobDependency{
guid: 'dependency-job-1'
agents: ['agent1', 'agent2', 'agent3']
}
// Create a job with this dependency
mut job := Job{
id: 2
guid: 'test-job-2'
actor: 'network_manager'
action: 'create'
dependencies: [dependency]
}
// Test dependency properties
assert job.dependencies.len == 1
assert job.dependencies[0].guid == 'dependency-job-1'
assert job.dependencies[0].agents.len == 3
assert job.dependencies[0].agents[0] == 'agent1'
assert job.dependencies[0].agents[1] == 'agent2'
assert job.dependencies[0].agents[2] == 'agent3'
// Add another dependency
job.dependencies << JobDependency{
guid: 'dependency-job-2'
agents: ['agent4']
}
// Test multiple dependencies
assert job.dependencies.len == 2
assert job.dependencies[1].guid == 'dependency-job-2'
assert job.dependencies[1].agents.len == 1
assert job.dependencies[1].agents[0] == 'agent4'
println('All job dependency tests passed!')
}
fn test_job_with_empty_values() {
// Create a job with minimal values
mut job := Job{
id: 3
guid: 'minimal-job'
actor: 'minimal_actor'
action: 'test'
}
// Serialize and deserialize
serialized := job.dumps() or {
assert false, 'Failed to serialize minimal job: ${err}'
return
}
deserialized := job_loads(serialized) or {
assert false, 'Failed to deserialize minimal job: ${err}'
return
}
// Verify defaults are preserved
assert deserialized.id == job.id
assert deserialized.guid == job.guid
assert deserialized.circle == 'default' // Default value
assert deserialized.context == 'default' // Default value
assert deserialized.actor == 'minimal_actor'
assert deserialized.action == 'test'
assert deserialized.agents.len == 0
assert deserialized.params.len == 0
assert deserialized.timeout_schedule == 60 // Default value
assert deserialized.timeout == 3600 // Default value
assert deserialized.log == true // Default value
assert deserialized.ignore_error == false // Default value
assert deserialized.ignore_error_codes.len == 0
assert deserialized.dependencies.len == 0
println('All minimal job tests passed!')
}