Loading src/main/java/org/etsi/osl/hypo/api/fabric/entity/DomainConnectionData.java +6 −4 Changes for src/main/java/org/etsi/osl/hypo/api/fabric/entity/DomainConnectionData.java: 6 added lines, 4 removed lines. Original line number Diff line number Diff line Loading @@ -14,9 +14,11 @@ import jakarta.persistence.PrePersist; import jakarta.persistence.Table; import jakarta.validation.constraints.Size; import java.util.List; import java.util.Set; import java.util.UUID; import lombok.Data; import org.etsi.osl.hypo.api.fabric.model.domain.identities.PortRange; import org.etsi.osl.hypo.core.common.fabric.management.ztc.host.Protocol; import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.type.SqlTypes; Loading Loading @@ -69,12 +71,12 @@ public class DomainConnectionData { private String address; @JdbcTypeCode(SqlTypes.JSON) @Column(columnDefinition = "jsonb") // or "jsonb" on PostgreSQL @Column(columnDefinition = "jsonb", nullable = false) private List<PortRange> portRanges; @Size(max = 40) @Column(nullable = false) private String protocol; @JdbcTypeCode(SqlTypes.JSON) @Column(columnDefinition = "jsonb", nullable = false) private Set<Protocol> protocols; // Many children belong to one parent @ManyToOne(fetch = FetchType.LAZY) Loading src/main/resources/db/migration/V1.0.3__domain_connection_protocols.sql 0 → 100644 +16 −0 Changes for src/main/resources/db/migration/V1.0.3__domain_connection_protocols.sql: 16 added lines, 0 removed lines. Original line number Diff line number Diff line ALTER TABLE DomainConnectionData ADD COLUMN protocols jsonb; UPDATE DomainConnectionData SET protocols = jsonb_build_array(protocol) WHERE protocol IS NOT NULL; UPDATE DomainConnectionData SET protocols = '[]'::jsonb WHERE protocols IS NULL; ALTER TABLE DomainConnectionData ALTER COLUMN protocols SET NOT NULL; ALTER TABLE DomainConnectionData DROP COLUMN protocol; No newline at end of file src/test/java/org/etsi/osl/hypo/api/fabric/database/DatabaseIntegrityTest.java +4 −2 Changes for src/test/java/org/etsi/osl/hypo/api/fabric/database/DatabaseIntegrityTest.java: 4 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ import jakarta.inject.Inject; import jakarta.transaction.Transactional; import java.util.List; import java.util.Optional; import java.util.Set; import org.etsi.osl.hypo.api.fabric.entity.DomainConnectionData; import org.etsi.osl.hypo.api.fabric.entity.DomainIdentityData; import org.etsi.osl.hypo.api.fabric.entity.NetworkController; Loading @@ -15,6 +16,7 @@ import org.etsi.osl.hypo.api.fabric.model.domain.identities.PortRange; import org.etsi.osl.hypo.api.fabric.repository.DomainConnectionDataRepository; import org.etsi.osl.hypo.api.fabric.repository.DomainIdentityRepository; import org.etsi.osl.hypo.api.fabric.repository.NetworkControllerRepository; import org.etsi.osl.hypo.core.common.fabric.management.ztc.host.Protocol; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; Loading Loading @@ -46,8 +48,8 @@ class DatabaseIntegrityTest { assertThat(domainConnectionData.getDomainConnectionDataId()).isEqualTo("dcd-test-uuid-001"); assertThat(domainConnectionData.getAddress()).isEqualTo("192.168.1.100"); PortRange portRange = new PortRange(8080, 8080); assertThat(domainConnectionData.getPortRanges()).isEqualTo(List.of(portRange)); assertThat(domainConnectionData.getProtocol()).isEqualTo("HTTPS"); assertThat(domainConnectionData.getPortRanges()).isNotEmpty().isEqualTo(List.of(portRange)); assertThat(domainConnectionData.getProtocols()).isNotEmpty().isEqualTo(Set.of(Protocol.TCP)); assertThat(domainConnectionData.getBindDomainIdentityId()).isEqualTo("identity-test-01"); assertThat(domainConnectionData.getDomainServiceId()).isEqualTo("service-test-01"); assertThat(domainConnectionData.getServiceId()).isEqualTo("srv-test-01"); Loading src/test/java/org/etsi/osl/hypo/api/fabric/service/DomainConnectionsServiceTest.java +28 −10 Changes for src/test/java/org/etsi/osl/hypo/api/fabric/service/DomainConnectionsServiceTest.java: 28 added lines, 10 removed lines. Original line number Diff line number Diff line Loading @@ -92,16 +92,24 @@ class DomainConnectionsServiceTest { @Test void createDomainConnection_success() { // Arrange request.setServiceId("svc1"); request.setBindDomainIdentityId("org1"); String svc1 = "svc1"; String address = "180.180.100.0"; Set<Protocol> protocols = Set.of(Protocol.TCP); String dialDomainIdentityID = "dialDomainIdentityID"; String service1 = "service1"; String bindIdentityID = "bindIdentityID"; PortRange portRange = new PortRange(90, 90); List<PortRange> portRanges = List.of(portRange); request.setServiceId(svc1); request.setBindDomainIdentityId(bindIdentityID); request.setServiceOrderId("order1"); request.setServiceOrderItemId("serviceOrderItem1"); request.setServiceId("service1"); request.setDialDomainIdentityId("dialDomainIdentityID"); request.setProtocols(Set.of(Protocol.TCP)); request.setAddress("180.180.100.0"); PortRange portRange = new PortRange(90, 90); request.setPortRanges(List.of(portRange)); request.setServiceId(service1); request.setDialDomainIdentityId(dialDomainIdentityID); request.setProtocols(protocols); request.setAddress(address); request.setPortRanges(portRanges); NetworkController nc = new NetworkController(); nc.setNetworkControllerId("nc1"); Loading @@ -109,7 +117,7 @@ class DomainConnectionsServiceTest { nc.setHostConfigTypeId("hostConfigTypeId"); // Mock repository to provide no existing domain connection when(repository.findByDomainServiceId("svc1")).thenReturn(Optional.empty()); when(repository.findByDomainServiceId(svc1)).thenReturn(Optional.empty()); // Mock Ziti Client Responses doReturn(getZitiResponse("hostCfg")) Loading Loading @@ -157,7 +165,17 @@ class DomainConnectionsServiceTest { assertDomainConnectionData(domainConnectionData, request); // Verify repository persist was called verify(repository, times(1)).persist(any(DomainConnectionData.class)); ArgumentCaptor<DomainConnectionData> captor = ArgumentCaptor.captor(); verify(repository, times(1)).persist(captor.capture()); DomainConnectionData databaseBody = captor.getValue(); assertThat(databaseBody.getProtocols()).isNotEmpty().isEqualTo(protocols); assertThat(databaseBody.getPortRanges()).isNotEmpty().isEqualTo(portRanges); assertThat(databaseBody.getBindDomainIdentityId()).isNotBlank().isEqualTo(bindIdentityID); assertThat(databaseBody.getDialDomainIdentityId()) .isNotBlank() .isEqualTo(dialDomainIdentityID); assertThat(databaseBody.getAddress()).isNotBlank().isEqualTo(address); assertThat(databaseBody.getServiceId()).isNotBlank().isEqualTo(service1); // Verify internal method calls verify(service, times(1)).createConfigHost(any()); Loading src/test/resources/db/migration-test/V999.0.0__seed_mock_data.sql +8 −6 Changes for src/test/resources/db/migration-test/V999.0.0__seed_mock_data.sql: 8 added lines, 6 removed lines. Original line number Diff line number Diff line Loading @@ -13,15 +13,17 @@ INSERT INTO NetworkController ( -- 2. Insert Child: DomainConnectionData (Fetch the FK from NetworkController by business key/unique name) INSERT INTO DomainConnectionData ( id, networkControllerId, address, bindDomainIdentityId, dialDomainIdentityId, domainServiceId, hostConfigId, interceptConfigId, policyBindId, policyDialId, protocol, serviceId, domainConnectionDataId, portRanges id, networkControllerId, address, bindDomainIdentityId, dialDomainIdentityId, dialDomainIdentityRole, domainServiceId, hostConfigId, interceptConfigId, policyBindId, policyDialId, protocols, serviceId, domainConnectionDataId, portRanges ) VALUES ( nextval('DomainConnectionData_SEQ'), (SELECT id FROM NetworkController WHERE networkName = 'Athens-Test-Core'), '192.168.1.100', 'identity-test-01', 'identity-test-02', 'service-test-01', 'host-cfg-test-01', 'intercept-cfg-test-01', 'bind-test-01', 'dial-test-01', 'HTTPS', 'srv-test-01', 'dcd-test-uuid-001', '[{"low": 8080, "high": 8080}]'::jsonb '192.168.1.100', 'identity-test-01', 'identity-test-02', 'role-test-01', 'service-test-01', 'host-cfg-test-01', 'intercept-cfg-test-01', 'bind-test-01', 'dial-test-01', '["tcp"]'::jsonb, 'srv-test-01', 'dcd-test-uuid-001', '[{"low": 8080, "high": 8080}]'::jsonb ); -- 3. Insert Child: DomainIdentity Loading Loading
src/main/java/org/etsi/osl/hypo/api/fabric/entity/DomainConnectionData.java +6 −4 Changes for src/main/java/org/etsi/osl/hypo/api/fabric/entity/DomainConnectionData.java: 6 added lines, 4 removed lines. Original line number Diff line number Diff line Loading @@ -14,9 +14,11 @@ import jakarta.persistence.PrePersist; import jakarta.persistence.Table; import jakarta.validation.constraints.Size; import java.util.List; import java.util.Set; import java.util.UUID; import lombok.Data; import org.etsi.osl.hypo.api.fabric.model.domain.identities.PortRange; import org.etsi.osl.hypo.core.common.fabric.management.ztc.host.Protocol; import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.type.SqlTypes; Loading Loading @@ -69,12 +71,12 @@ public class DomainConnectionData { private String address; @JdbcTypeCode(SqlTypes.JSON) @Column(columnDefinition = "jsonb") // or "jsonb" on PostgreSQL @Column(columnDefinition = "jsonb", nullable = false) private List<PortRange> portRanges; @Size(max = 40) @Column(nullable = false) private String protocol; @JdbcTypeCode(SqlTypes.JSON) @Column(columnDefinition = "jsonb", nullable = false) private Set<Protocol> protocols; // Many children belong to one parent @ManyToOne(fetch = FetchType.LAZY) Loading
src/main/resources/db/migration/V1.0.3__domain_connection_protocols.sql 0 → 100644 +16 −0 Changes for src/main/resources/db/migration/V1.0.3__domain_connection_protocols.sql: 16 added lines, 0 removed lines. Original line number Diff line number Diff line ALTER TABLE DomainConnectionData ADD COLUMN protocols jsonb; UPDATE DomainConnectionData SET protocols = jsonb_build_array(protocol) WHERE protocol IS NOT NULL; UPDATE DomainConnectionData SET protocols = '[]'::jsonb WHERE protocols IS NULL; ALTER TABLE DomainConnectionData ALTER COLUMN protocols SET NOT NULL; ALTER TABLE DomainConnectionData DROP COLUMN protocol; No newline at end of file
src/test/java/org/etsi/osl/hypo/api/fabric/database/DatabaseIntegrityTest.java +4 −2 Changes for src/test/java/org/etsi/osl/hypo/api/fabric/database/DatabaseIntegrityTest.java: 4 added lines, 2 removed lines. Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ import jakarta.inject.Inject; import jakarta.transaction.Transactional; import java.util.List; import java.util.Optional; import java.util.Set; import org.etsi.osl.hypo.api.fabric.entity.DomainConnectionData; import org.etsi.osl.hypo.api.fabric.entity.DomainIdentityData; import org.etsi.osl.hypo.api.fabric.entity.NetworkController; Loading @@ -15,6 +16,7 @@ import org.etsi.osl.hypo.api.fabric.model.domain.identities.PortRange; import org.etsi.osl.hypo.api.fabric.repository.DomainConnectionDataRepository; import org.etsi.osl.hypo.api.fabric.repository.DomainIdentityRepository; import org.etsi.osl.hypo.api.fabric.repository.NetworkControllerRepository; import org.etsi.osl.hypo.core.common.fabric.management.ztc.host.Protocol; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; Loading Loading @@ -46,8 +48,8 @@ class DatabaseIntegrityTest { assertThat(domainConnectionData.getDomainConnectionDataId()).isEqualTo("dcd-test-uuid-001"); assertThat(domainConnectionData.getAddress()).isEqualTo("192.168.1.100"); PortRange portRange = new PortRange(8080, 8080); assertThat(domainConnectionData.getPortRanges()).isEqualTo(List.of(portRange)); assertThat(domainConnectionData.getProtocol()).isEqualTo("HTTPS"); assertThat(domainConnectionData.getPortRanges()).isNotEmpty().isEqualTo(List.of(portRange)); assertThat(domainConnectionData.getProtocols()).isNotEmpty().isEqualTo(Set.of(Protocol.TCP)); assertThat(domainConnectionData.getBindDomainIdentityId()).isEqualTo("identity-test-01"); assertThat(domainConnectionData.getDomainServiceId()).isEqualTo("service-test-01"); assertThat(domainConnectionData.getServiceId()).isEqualTo("srv-test-01"); Loading
src/test/java/org/etsi/osl/hypo/api/fabric/service/DomainConnectionsServiceTest.java +28 −10 Changes for src/test/java/org/etsi/osl/hypo/api/fabric/service/DomainConnectionsServiceTest.java: 28 added lines, 10 removed lines. Original line number Diff line number Diff line Loading @@ -92,16 +92,24 @@ class DomainConnectionsServiceTest { @Test void createDomainConnection_success() { // Arrange request.setServiceId("svc1"); request.setBindDomainIdentityId("org1"); String svc1 = "svc1"; String address = "180.180.100.0"; Set<Protocol> protocols = Set.of(Protocol.TCP); String dialDomainIdentityID = "dialDomainIdentityID"; String service1 = "service1"; String bindIdentityID = "bindIdentityID"; PortRange portRange = new PortRange(90, 90); List<PortRange> portRanges = List.of(portRange); request.setServiceId(svc1); request.setBindDomainIdentityId(bindIdentityID); request.setServiceOrderId("order1"); request.setServiceOrderItemId("serviceOrderItem1"); request.setServiceId("service1"); request.setDialDomainIdentityId("dialDomainIdentityID"); request.setProtocols(Set.of(Protocol.TCP)); request.setAddress("180.180.100.0"); PortRange portRange = new PortRange(90, 90); request.setPortRanges(List.of(portRange)); request.setServiceId(service1); request.setDialDomainIdentityId(dialDomainIdentityID); request.setProtocols(protocols); request.setAddress(address); request.setPortRanges(portRanges); NetworkController nc = new NetworkController(); nc.setNetworkControllerId("nc1"); Loading @@ -109,7 +117,7 @@ class DomainConnectionsServiceTest { nc.setHostConfigTypeId("hostConfigTypeId"); // Mock repository to provide no existing domain connection when(repository.findByDomainServiceId("svc1")).thenReturn(Optional.empty()); when(repository.findByDomainServiceId(svc1)).thenReturn(Optional.empty()); // Mock Ziti Client Responses doReturn(getZitiResponse("hostCfg")) Loading Loading @@ -157,7 +165,17 @@ class DomainConnectionsServiceTest { assertDomainConnectionData(domainConnectionData, request); // Verify repository persist was called verify(repository, times(1)).persist(any(DomainConnectionData.class)); ArgumentCaptor<DomainConnectionData> captor = ArgumentCaptor.captor(); verify(repository, times(1)).persist(captor.capture()); DomainConnectionData databaseBody = captor.getValue(); assertThat(databaseBody.getProtocols()).isNotEmpty().isEqualTo(protocols); assertThat(databaseBody.getPortRanges()).isNotEmpty().isEqualTo(portRanges); assertThat(databaseBody.getBindDomainIdentityId()).isNotBlank().isEqualTo(bindIdentityID); assertThat(databaseBody.getDialDomainIdentityId()) .isNotBlank() .isEqualTo(dialDomainIdentityID); assertThat(databaseBody.getAddress()).isNotBlank().isEqualTo(address); assertThat(databaseBody.getServiceId()).isNotBlank().isEqualTo(service1); // Verify internal method calls verify(service, times(1)).createConfigHost(any()); Loading
src/test/resources/db/migration-test/V999.0.0__seed_mock_data.sql +8 −6 Changes for src/test/resources/db/migration-test/V999.0.0__seed_mock_data.sql: 8 added lines, 6 removed lines. Original line number Diff line number Diff line Loading @@ -13,15 +13,17 @@ INSERT INTO NetworkController ( -- 2. Insert Child: DomainConnectionData (Fetch the FK from NetworkController by business key/unique name) INSERT INTO DomainConnectionData ( id, networkControllerId, address, bindDomainIdentityId, dialDomainIdentityId, domainServiceId, hostConfigId, interceptConfigId, policyBindId, policyDialId, protocol, serviceId, domainConnectionDataId, portRanges id, networkControllerId, address, bindDomainIdentityId, dialDomainIdentityId, dialDomainIdentityRole, domainServiceId, hostConfigId, interceptConfigId, policyBindId, policyDialId, protocols, serviceId, domainConnectionDataId, portRanges ) VALUES ( nextval('DomainConnectionData_SEQ'), (SELECT id FROM NetworkController WHERE networkName = 'Athens-Test-Core'), '192.168.1.100', 'identity-test-01', 'identity-test-02', 'service-test-01', 'host-cfg-test-01', 'intercept-cfg-test-01', 'bind-test-01', 'dial-test-01', 'HTTPS', 'srv-test-01', 'dcd-test-uuid-001', '[{"low": 8080, "high": 8080}]'::jsonb '192.168.1.100', 'identity-test-01', 'identity-test-02', 'role-test-01', 'service-test-01', 'host-cfg-test-01', 'intercept-cfg-test-01', 'bind-test-01', 'dial-test-01', '["tcp"]'::jsonb, 'srv-test-01', 'dcd-test-uuid-001', '[{"low": 8080, "high": 8080}]'::jsonb ); -- 3. Insert Child: DomainIdentity Loading