@@ -80,12 +80,20 @@ jobs:
8080 sys.modules['f.shared'] = fake_f.shared
8181 sys.modules['f.shared.otel_logging'] = fake_f.shared.otel_logging
8282
83+ fake_controller_shared = FakeControllerModule()
84+ fake_controller_otel = MagicMock()
85+ fake_controller_otel.get_logger = lambda name: MagicMock()
86+ fake_controller_shared.otel_logging = fake_controller_otel
87+ sys.modules['f.controller.shared'] = fake_controller_shared
88+ sys.modules['f.controller.shared.otel_logging'] = fake_controller_otel
89+
8390 # Pre-populate all f.controller.xxx modules BEFORE any imports
8491 for module_name in ['config', 'database', 'breeder_service', 'breeder_create',
8592 'breeder_get', 'breeder_delete', 'breeders_get',
8693 'breeder_stop', 'breeder_start',
8794 'credential_create', 'credential_get', 'credential_delete',
88- 'credentials_get']:
95+ 'credentials_get',
96+ 'target_create', 'target_get', 'targets_get', 'target_delete']:
8997 stub = FakeControllerModule()
9098 sys.modules[f'f.controller.{module_name}'] = stub
9199
@@ -134,6 +142,18 @@ jobs:
134142 import controller.credentials_get as credentials_get
135143 populate_stub_module(sys.modules['f.controller.credentials_get'], credentials_get)
136144
145+ import controller.target_create as target_create
146+ populate_stub_module(sys.modules['f.controller.target_create'], target_create)
147+
148+ import controller.target_get as target_get
149+ populate_stub_module(sys.modules['f.controller.target_get'], target_get)
150+
151+ import controller.targets_get as targets_get
152+ populate_stub_module(sys.modules['f.controller.targets_get'], targets_get)
153+
154+ import controller.target_delete as target_delete
155+ populate_stub_module(sys.modules['f.controller.target_delete'], target_delete)
156+
137157 # Test imports
138158 from controller.config import DatabaseConfig
139159 from controller.breeder_service import BreederService
@@ -144,6 +164,8 @@ jobs:
144164 from controller.breeders_get import main as list_breeders
145165 from controller.breeder_stop import main as stop_breeder
146166 from controller.breeder_start import main as start_breeder
167+ from controller.target_create import main as create_target
168+ from controller.target_get import main as get_target
147169
148170 # Setup test config - use the actual database names
149171 # Meta DB connection
@@ -185,6 +207,18 @@ jobs:
185207 execute_ddl_query(admin_config, 'CREATE DATABASE archive_db;')
186208 print('✓ Created archive_db')
187209
210+ # Create a target first (breeder configs now require targetRefs)
211+ print('Creating test target for breeder config...')
212+ target_result = create_target(request_data={
213+ 'name': 'test-target',
214+ 'targetType': 'ssh',
215+ 'address': 'test.local',
216+ 'username': 'test_user'
217+ })
218+ assert target_result['result'] == 'SUCCESS', f'Target create failed: {target_result}'
219+ test_target_id = target_result['data']['id']
220+ print(f'✓ Created test target: {test_target_id}')
221+
188222 # Test 1: Create breeder (tests schema creation + data insertion)
189223 print('Testing breeder creation (schema + data)...')
190224 breeder_config = {
@@ -203,12 +237,7 @@ jobs:
203237 }
204238 },
205239 'effectuation': {
206- 'targets': [{
207- 'type': 'ssh',
208- 'address': 'test.local',
209- 'username': 'test_user',
210- 'credentialName': 'test-ssh-key'
211- }]
240+ 'targetRefs': [test_target_id]
212241 },
213242 'cooperation': {'active': False},
214243 'objectives': [{'name': 'test_metric', 'goal': 'MINIMIZE'}],
@@ -395,12 +424,20 @@ jobs:
395424 sys.modules['f.shared'] = fake_f.shared
396425 sys.modules['f.shared.otel_logging'] = fake_f.shared.otel_logging
397426
427+ fake_controller_shared = FakeControllerModule()
428+ fake_controller_otel = MagicMock()
429+ fake_controller_otel.get_logger = lambda name: MagicMock()
430+ fake_controller_shared.otel_logging = fake_controller_otel
431+ sys.modules['f.controller.shared'] = fake_controller_shared
432+ sys.modules['f.controller.shared.otel_logging'] = fake_controller_otel
433+
398434 # Pre-populate all f.controller.xxx modules BEFORE any imports
399435 for module_name in ['config', 'database', 'breeder_service', 'breeder_create',
400436 'breeder_get', 'breeder_delete', 'breeders_get',
401437 'breeder_stop', 'breeder_start',
402438 'credential_create', 'credential_get', 'credential_delete',
403- 'credentials_get']:
439+ 'credentials_get',
440+ 'target_create', 'target_get', 'targets_get', 'target_delete']:
404441 stub = FakeControllerModule()
405442 sys.modules[f'f.controller.{module_name}'] = stub
406443
@@ -450,6 +487,18 @@ jobs:
450487 import controller.credentials_get as credentials_get
451488 populate_stub_module(sys.modules['f.controller.credentials_get'], credentials_get)
452489
490+ import controller.target_create as target_create
491+ populate_stub_module(sys.modules['f.controller.target_create'], target_create)
492+
493+ import controller.target_get as target_get
494+ populate_stub_module(sys.modules['f.controller.target_get'], target_get)
495+
496+ import controller.targets_get as targets_get
497+ populate_stub_module(sys.modules['f.controller.targets_get'], targets_get)
498+
499+ import controller.target_delete as target_delete
500+ populate_stub_module(sys.modules['f.controller.target_delete'], target_delete)
501+
453502 # Test imports
454503 from controller.config import DatabaseConfig
455504 from controller.database import execute_query, execute_ddl_query
0 commit comments