Commit 747209c5 authored by Anastasios Poimenidis's avatar Anastasios Poimenidis
Browse files

fix: introduce column DomainConnectionData.protocols and drop column DomainConnectionData.protocol

parent 897989aa
Loading
Loading
Loading
Loading
Loading
+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
@@ -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;

@@ -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)
+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
+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
@@ -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;
@@ -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;
@@ -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");
+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
@@ -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");
@@ -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"))
@@ -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());
+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
@@ -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