Commit 0dda682c authored by Labros Papadopoulos's avatar Labros Papadopoulos
Browse files

feat: refactor telemetry

parent 094b6cd7
Loading
Loading
Loading
Loading
+20 −0
Original line number Original line Diff line number Diff line
package org.etsi.osl.hypo.clients.telemetry.helpers;

import io.smallrye.reactive.messaging.memory.InMemorySink;
import java.util.function.Supplier;

public class HasReceivedMessagesSupplier implements Supplier<Boolean> {
    final InMemorySink<?> inMemorySink;
    int wantedNumberOfMessagesReceived;

    public HasReceivedMessagesSupplier(
            InMemorySink<?> inMemorySink, int wantedNumberOfMessagesReceived) {
        this.inMemorySink = inMemorySink;
        this.wantedNumberOfMessagesReceived = wantedNumberOfMessagesReceived;
    }

    @Override
    public Boolean get() {
        return inMemorySink.received().stream().count() == Long.valueOf(wantedNumberOfMessagesReceived);
    }
}
+41 −0
Original line number Original line Diff line number Diff line
package org.etsi.osl.hypo.clients.telemetry.helpers;

import static org.etsi.osl.hypo.core.common.constants.SonataKafkaTriggersConstants.SONATA_SERVICE_DASHBOARD_RESULT;
import static org.etsi.osl.hypo.core.common.constants.SonataKafkaTriggersConstants.SONATA_SERVICE_DELETE_DASHBOARD_RESULT;
import static org.etsi.osl.hypo.core.common.constants.SonataKafkaTriggersConstants.TELEMETRY_CREATE_PROMETHEUS_JOB_AND_GRAFANA_DASHBOARD;
import static org.etsi.osl.hypo.core.common.constants.SonataKafkaTriggersConstants.TELEMETRY_DELETE_PROMETHEUS_JOB_AND_GRAFANA_DASHBOARD;
import static org.etsi.osl.hypo.core.common.constants.SonataKafkaTriggersConstants.TELEMETRY_PLATFORM_SERVICE;
import static org.etsi.osl.hypo.core.common.constants.SonataKafkaTriggersConstants.TELEMETRY_PLATFORM_SERVICE_RESULT;

import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
import io.smallrye.reactive.messaging.memory.InMemoryConnector;
import java.util.HashMap;
import java.util.Map;

public class InMemoryKafkaTestLifecycleManager implements QuarkusTestResourceLifecycleManager {

    @Override
    public Map<String, String> start() {
        Map<String, String> env = new HashMap<>();
        env.putAll(
                InMemoryConnector.switchIncomingChannelsToInMemory(
                        TELEMETRY_CREATE_PROMETHEUS_JOB_AND_GRAFANA_DASHBOARD));
        env.putAll(
                InMemoryConnector.switchIncomingChannelsToInMemory(
                        TELEMETRY_DELETE_PROMETHEUS_JOB_AND_GRAFANA_DASHBOARD));

        env.putAll(InMemoryConnector.switchIncomingChannelsToInMemory(TELEMETRY_PLATFORM_SERVICE));

        env.putAll(InMemoryConnector.switchOutgoingChannelsToInMemory(SONATA_SERVICE_DASHBOARD_RESULT));
        env.putAll(
                InMemoryConnector.switchOutgoingChannelsToInMemory(SONATA_SERVICE_DELETE_DASHBOARD_RESULT));
        env.putAll(
                InMemoryConnector.switchOutgoingChannelsToInMemory(TELEMETRY_PLATFORM_SERVICE_RESULT));
        return env;
    }

    @Override
    public void stop() {
        InMemoryConnector.clear();
    }
}
+251 −0
Original line number Original line Diff line number Diff line
package org.etsi.osl.hypo.clients.telemetry.kafka.incoming;

import static org.assertj.core.api.Assertions.assertThat;
import static org.etsi.osl.hypo.core.common.constants.SonataKafkaTriggersConstants.SONATA_SERVICE_DASHBOARD_RESULT;
import static org.etsi.osl.hypo.core.common.constants.SonataKafkaTriggersConstants.SONATA_SERVICE_DELETE_DASHBOARD_RESULT;
import static org.etsi.osl.hypo.core.common.constants.SonataKafkaTriggersConstants.TELEMETRY_CREATE_PROMETHEUS_JOB_AND_GRAFANA_DASHBOARD;
import static org.etsi.osl.hypo.core.common.constants.SonataKafkaTriggersConstants.TELEMETRY_DELETE_PROMETHEUS_JOB_AND_GRAFANA_DASHBOARD;
import static org.etsi.osl.hypo.core.common.constants.SonataKafkaTriggersConstants.TELEMETRY_PLATFORM_SERVICE;
import static org.etsi.osl.hypo.core.common.constants.SonataKafkaTriggersConstants.TELEMETRY_PLATFORM_SERVICE_RESULT;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any;

import org.etsi.osl.hypo.clients.telemetry.helpers.HasReceivedMessagesSupplier;
import org.etsi.osl.hypo.clients.telemetry.helpers.InMemoryKafkaTestLifecycleManager;
import io.quarkus.test.InjectMock;
import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
import io.quarkus.test.junit.mockito.InjectSpy;
import io.smallrye.mutiny.Multi;
import io.smallrye.mutiny.Uni;
import io.smallrye.reactive.messaging.memory.InMemoryConnector;
import io.smallrye.reactive.messaging.memory.InMemorySink;
import io.smallrye.reactive.messaging.memory.InMemorySource;
import jakarta.enterprise.inject.Any;
import jakarta.inject.Inject;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.time.Duration;
import java.util.UUID;
import org.eclipse.microprofile.reactive.messaging.Message;
import org.eclipse.microprofile.reactive.messaging.Metadata;
import org.etsi.osl.hypo.clients.telemetry.service.TelemetryService;
import org.etsi.osl.hypo.core.common.Status;
import org.etsi.osl.hypo.core.common.telemetry.CloudEventDashboardData;
import org.etsi.osl.hypo.core.common.telemetry.CloudEventDeleteServiceData;
import org.etsi.osl.hypo.core.common.telemetry.CloudEventDeleteServiceTelemetry;
import org.etsi.osl.hypo.core.common.telemetry.CloudEventUpdateServiceTelemetry;
import org.etsi.osl.hypo.core.common.telemetry.DashboardData;
import org.etsi.osl.hypo.core.common.telemetry.DeleteTelemetryData;
import org.etsi.osl.hypo.core.common.telemetry.DeleteTelemetryDataResult;
import org.etsi.osl.hypo.core.common.telemetry.UpdateTelemetryData;
import org.etsi.osl.hypo.core.common.telemetry.Url;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;

@QuarkusTest
@QuarkusTestResource(
        value = InMemoryKafkaTestLifecycleManager.class,
        restrictToAnnotatedClass = false)
class TelemetryKafkaListenersTest {

    @Inject @Any InMemoryConnector connector;
    @InjectSpy TelemetryKafkaListeners kafkaListeners;

    InMemorySource<Message<CloudEventUpdateServiceTelemetry>>
            cloudEventUpdateServiceTelemetryInMemorySource;
    InMemorySource<Message<CloudEventUpdateServiceTelemetry>>
            cloudEventPlatformServiceTelemetryInMemorySource;
    InMemorySource<Message<CloudEventDeleteServiceTelemetry>>
            cloudEventDeleteServiceTelemetryInMemorySource;
    InMemorySink<CloudEventDashboardData> cloudEventDashboardDataInMemorySink;
    InMemorySink<CloudEventDeleteServiceData> cloudEventDeleteDataInMemorySink;
    InMemorySink<CloudEventDashboardData> cloudEventPlatformDashboardDataInMemorySink;

    @InjectMock TelemetryService telemetryService;

    @BeforeEach
    void init() {
        cloudEventUpdateServiceTelemetryInMemorySource =
                connector.source(TELEMETRY_CREATE_PROMETHEUS_JOB_AND_GRAFANA_DASHBOARD);
        cloudEventDashboardDataInMemorySink = connector.sink(SONATA_SERVICE_DASHBOARD_RESULT);

        cloudEventDeleteServiceTelemetryInMemorySource =
                connector.source(TELEMETRY_DELETE_PROMETHEUS_JOB_AND_GRAFANA_DASHBOARD);
        cloudEventDeleteDataInMemorySink = connector.sink(SONATA_SERVICE_DELETE_DASHBOARD_RESULT);

        cloudEventPlatformServiceTelemetryInMemorySource = connector.source(TELEMETRY_PLATFORM_SERVICE);
        cloudEventPlatformDashboardDataInMemorySink = connector.sink(TELEMETRY_PLATFORM_SERVICE_RESULT);
    }

    @Test
    void receiveServiceUpdateStateMessage() throws MalformedURLException, URISyntaxException {

        Url prometheusUrl = new Url();
        prometheusUrl.setHost("192.168.5.143");
        prometheusUrl.setPort(3000);

        UpdateTelemetryData telemetryData = new UpdateTelemetryData();
        telemetryData.setPrometheus(prometheusUrl);

        telemetryData.setRelatedPartyId(UUID.randomUUID());

        UUID serviceId = UUID.fromString("5d813037-9d6b-4358-9aeb-ed005f230995");

        telemetryData.setServiceId(serviceId);

        CloudEventUpdateServiceTelemetry cloudEventServiceTelemetry =
                new CloudEventUpdateServiceTelemetry();
        cloudEventServiceTelemetry.setUpdateTelemetryData(telemetryData);

        CloudEventDashboardData cloudEventPersistDashboardData = new CloudEventDashboardData();

        UUID sonataProcessInstanceId = UUID.randomUUID();
        cloudEventPersistDashboardData.setProcessReferenceId(sonataProcessInstanceId);
        cloudEventPersistDashboardData.setSource(TELEMETRY_CREATE_PROMETHEUS_JOB_AND_GRAFANA_DASHBOARD);

        DashboardData persistDashboardData = new DashboardData();
        persistDashboardData.setDashboardId("cd413037-9d6b-4358-9aeb-ed005f230459");
        persistDashboardData.setServiceId(serviceId);
        persistDashboardData.setDashboardDataOrderMessage("");
        persistDashboardData.setDashboardDataOrderStatus(Status.FAILURE);
        cloudEventPersistDashboardData.setDashboardData(persistDashboardData);

        Mockito.when(telemetryService.updateSecretJobAndCreateDashboard(any()))
                .thenReturn(cloudEventPersistDashboardData);

        //        Mockito.when(getKeycloakTokenFromHeader(any())).thenReturn("token");

        Message<CloudEventUpdateServiceTelemetry> cloudEventUpdateServiceTelemetryMessage =
                Mockito.mock(Message.class);
        Mockito.when(cloudEventUpdateServiceTelemetryMessage.getPayload())
                .thenReturn(cloudEventServiceTelemetry);
        Metadata metadata = Mockito.mock(Metadata.class);
        Mockito.when(cloudEventUpdateServiceTelemetryMessage.getMetadata()).thenReturn(metadata);

        cloudEventUpdateServiceTelemetryInMemorySource.send(cloudEventUpdateServiceTelemetryMessage);

        pollKafkaChannel(cloudEventDashboardDataInMemorySink, 1).await().atMost(Duration.ofSeconds(10));

        CloudEventDashboardData cloudEventDashboardData =
                cloudEventDashboardDataInMemorySink.received().get(0).getPayload();

        assertEquals(cloudEventDashboardData.getDashboardData().getServiceId(), serviceId);
        assertThat(cloudEventDashboardData.getSource())
                .isNotNull()
                .isEqualTo(cloudEventPersistDashboardData.getSource());
        assertThat(cloudEventDashboardData.getProcessReferenceId())
                .isNotNull()
                .isEqualTo(cloudEventPersistDashboardData.getProcessReferenceId());
    }

    @Test
    void receiveServiceDeleteStateMessage() {
        UUID serviceId = UUID.fromString("5c813037-9d6b-4358-9aeb-ed005f230444");
        DeleteTelemetryData telemetryData = new DeleteTelemetryData();

        telemetryData.setServiceId(serviceId);

        CloudEventDeleteServiceTelemetry deleteServiceTelemetry =
                new CloudEventDeleteServiceTelemetry();
        deleteServiceTelemetry.setDeleteTelemetryData(telemetryData);

        CloudEventDeleteServiceData deleteServiceData = new CloudEventDeleteServiceData();

        DeleteTelemetryDataResult deleteData = new DeleteTelemetryDataResult();
        deleteData.setServiceId(serviceId);
        deleteData.setDashboardDataOrderMessage("");
        deleteData.setDashboardDataOrderStatus(Status.FAILURE);
        deleteServiceData.setDeleteTelemetryDataResult(deleteData);

        Mockito.when(telemetryService.deleteSecretJobAndDashboard(any())).thenReturn(deleteServiceData);

        Message<CloudEventDeleteServiceTelemetry> cloudEventDeleteServiceTelemetryMessage =
                Mockito.mock(Message.class);
        Mockito.when(cloudEventDeleteServiceTelemetryMessage.getPayload())
                .thenReturn(deleteServiceTelemetry);
        Metadata metadata = Mockito.mock(Metadata.class);
        Mockito.when(cloudEventDeleteServiceTelemetryMessage.getMetadata()).thenReturn(metadata);

        cloudEventDeleteServiceTelemetryInMemorySource.send(cloudEventDeleteServiceTelemetryMessage);

        pollKafkaChannel(cloudEventDeleteDataInMemorySink, 1).await().atMost(Duration.ofSeconds(10));

        CloudEventDeleteServiceData actualDeletedData =
                cloudEventDeleteDataInMemorySink.received().get(0).getPayload();

        assertEquals(actualDeletedData.getDeleteTelemetryDataResult().getServiceId(), serviceId);
    }

    @Test
    void receiveServicePlatformStateMessage() throws Exception {
        Url prometheusUrl = new Url();
        prometheusUrl.setHost("192.168.5.143");
        prometheusUrl.setPort(3000);

        UpdateTelemetryData telemetryData = new UpdateTelemetryData();
        telemetryData.setPrometheus(prometheusUrl);

        telemetryData.setRelatedPartyId(UUID.randomUUID());

        UUID serviceId = UUID.fromString("5d813037-9d6b-4358-9aeb-ed005f230995");

        telemetryData.setServiceId(serviceId);

        CloudEventUpdateServiceTelemetry cloudEventServiceTelemetry =
                new CloudEventUpdateServiceTelemetry();
        cloudEventServiceTelemetry.setUpdateTelemetryData(telemetryData);

        CloudEventDashboardData cloudEventPersistDashboardData = new CloudEventDashboardData();

        UUID sonataProcessInstanceId = UUID.randomUUID();
        cloudEventPersistDashboardData.setProcessReferenceId(sonataProcessInstanceId);
        cloudEventPersistDashboardData.setSource(TELEMETRY_PLATFORM_SERVICE);

        DashboardData persistDashboardData = new DashboardData();
        persistDashboardData.setDashboardId("cd413037-9d6b-4358-9aeb-ed005f230459");
        persistDashboardData.setServiceId(serviceId);
        persistDashboardData.setDashboardDataOrderMessage("");
        persistDashboardData.setDashboardDataOrderStatus(Status.FAILURE);
        cloudEventPersistDashboardData.setDashboardData(persistDashboardData);

        Mockito.when(telemetryService.platformDashboard(any()))
                .thenReturn(cloudEventPersistDashboardData);

        Message<CloudEventUpdateServiceTelemetry> cloudEventUpdateServiceTelemetryMessage =
                Mockito.mock(Message.class);
        Mockito.when(cloudEventUpdateServiceTelemetryMessage.getPayload())
                .thenReturn(cloudEventServiceTelemetry);
        Metadata metadata = Mockito.mock(Metadata.class);
        Mockito.when(cloudEventUpdateServiceTelemetryMessage.getMetadata()).thenReturn(metadata);

        cloudEventPlatformServiceTelemetryInMemorySource.send(cloudEventUpdateServiceTelemetryMessage);

        pollKafkaChannel(cloudEventPlatformDashboardDataInMemorySink, 1)
                .await()
                .atMost(Duration.ofSeconds(10));

        CloudEventDashboardData cloudEventDashboardData =
                cloudEventPlatformDashboardDataInMemorySink.received().get(0).getPayload();

        assertEquals(cloudEventDashboardData.getDashboardData().getServiceId(), serviceId);
        assertThat(cloudEventDashboardData.getSource())
                .isNotNull()
                .isEqualTo(cloudEventPersistDashboardData.getSource());
        assertThat(cloudEventDashboardData.getProcessReferenceId())
                .isNotNull()
                .isEqualTo(cloudEventPersistDashboardData.getProcessReferenceId());
    }

    public static Uni<Boolean> pollKafkaChannel(
            InMemorySink<?> inMemorySink, int wantedNumberOfMessages) {
        return Multi.createBy()
                .repeating()
                .supplier(new HasReceivedMessagesSupplier(inMemorySink, wantedNumberOfMessages))
                .withDelay(Duration.ofMillis(100))
                .whilst(s -> (s == null || !s))
                .collect()
                .last();
    }
}
+114 −0
Original line number Original line Diff line number Diff line
package org.etsi.osl.hypo.clients.telemetry.service;

import static org.etsi.osl.hypo.clients.telemetry.config.ApplicationProperties.PROMETHEUS_YML_FILE;
import static org.junit.jupiter.api.Assertions.*;

import io.fabric8.kubernetes.api.model.Secret;
import io.quarkus.test.junit.QuarkusTest;
import jakarta.inject.Inject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.etsi.osl.hypo.clients.telemetry.config.ApplicationProperties;
import org.etsi.osl.hypo.clients.telemetry.service.EditSecretService;
import org.etsi.osl.hypo.core.common.telemetry.CloudEventDeleteServiceTelemetry;
import org.etsi.osl.hypo.core.common.telemetry.CloudEventUpdateServiceTelemetry;
import org.etsi.osl.hypo.core.common.telemetry.DeleteTelemetryData;
import org.etsi.osl.hypo.core.common.telemetry.UpdateTelemetryData;
import org.etsi.osl.hypo.core.common.telemetry.Url;
import org.junit.jupiter.api.Test;

@QuarkusTest
class EditSecretServiceTest {

    @Inject private EditSecretService editSecretService;

    @Test
    void addPrometheusJob() throws Exception {

        String prometheusBase64 =
                "LSBqb2JfbmFtZTogcHJvbWV0aGV1cwogIHN0YXRpY19jb25maWdzOgogIC0gdGFyZ2V0czoKICAgIC0gMTI3LjAuMC4xOjkwOTA=";
        String expected =
                "LSBqb2JfbmFtZTogcHJvbWV0aGV1cwogIHN0YXRpY19jb25maWdzOgogIC0gdGFyZ2V0czoKICAgIC0gMTI3LjAuMC4xOjkwOTAKLSBqb2JfbmFtZTogZGI3OTEzOTAtMTBjZS00OTRkLTlkMzctMTkyYmIyMmM3ODM1CiAgc3RhdGljX2NvbmZpZ3M6CiAgLSB0YXJnZXRzOgogICAgLSAxOTIuMTY4LjUuMjEzOjMwMDkwCiAgcGFyYW1zOgogICAgbWF0Y2hbXToKICAgIC0gJ3tuYW1lc3BhY2U9fiIuKm5hbWVzcGNlMnxuYW1lc3BjZTEuKiJ9JwogIG1ldHJpY3NfcGF0aDogL2ZlZGVyYXRlCg==";

        Map<String, String> data = new HashMap<>();
        data.put(ApplicationProperties.PROMETHEUS_YML_FILE, prometheusBase64);

        Secret secret = new Secret();
        secret.setData(data);
        Url prometheusUrl = new Url();
        prometheusUrl.setHost("192.168.5.213");
        prometheusUrl.setPort(30090);

        List<String> namespaces = List.of("namespce2", "namespce1");

        UpdateTelemetryData telemetryData = new UpdateTelemetryData();
        telemetryData.setPrometheus(prometheusUrl);
        telemetryData.setNamespaces(namespaces);
        telemetryData.setRelatedPartyId(UUID.randomUUID());
        telemetryData.setServiceId(UUID.fromString("db791390-10ce-494d-9d37-192bb22c7835"));

        CloudEventUpdateServiceTelemetry cloudEventServiceTelemetry =
                new CloudEventUpdateServiceTelemetry();
        cloudEventServiceTelemetry.setUpdateTelemetryData(telemetryData);

        String actual =
                editSecretService.addPrometheusJob(
                        secret.getData().get(PROMETHEUS_YML_FILE), cloudEventServiceTelemetry);

        assertEquals(actual, expected);
    }

    @Test
    void addPrometheusJobException() {

        String prometheusBase64 =
                "LSBqb2JfbmFtZTogcHJvbWV0aGV1cwogIHN0YXRpY19jb25maWdzOgogIC0gdGFyZ2V0czoKICAgIC0gMTI3LjAuMC4xOjkwOTAKLSBqb2JfbmFtZTogZGI3OTEzOTAtMTBjZS00OTRkLTlkMzctMTkyYmIyMmM3ODM1CiAgc3RhdGljX2NvbmZpZ3M6CiAgLSB0YXJnZXRzOgogICAgLSAxOTIuMTY4LjUuMjEzOjMwMDkwCiAgcGFyYW1zOgogIC0gbWF0Y2hbXToKICAgIC0gJyAnJ21hdGNoW106e19fbmFtZV9fPX4iY29udGFpbmVyX21lbW9yeV91c2FnZV9ieXRlc3xjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWwiLAogICAgICBjb250YWluZXI9fiJyMTIzNDU2In0nJycKICBtZXRyaWNzX3BhdGg6IC9mZWRlcmF0ZQo=";

        UpdateTelemetryData telemetryData = new UpdateTelemetryData();
        telemetryData.setServiceId(UUID.fromString("db791390-10ce-494d-9d37-192bb22c7835"));

        CloudEventUpdateServiceTelemetry cloudEventServiceTelemetry =
                new CloudEventUpdateServiceTelemetry();
        cloudEventServiceTelemetry.setUpdateTelemetryData(telemetryData);

        Exception exception =
                assertThrows(
                        Exception.class,
                        () -> {
                            editSecretService.addPrometheusJob(prometheusBase64, cloudEventServiceTelemetry);
                        });

        assertTrue(
                exception
                        .getMessage()
                        .contains("The jobName db791390-10ce-494d-9d37-192bb22c7835 is already exists!"));
    }

    @Test
    void deletePrometheusJob() throws Exception {

        String prometheusBase64 =
                "LSBqb2JfbmFtZTogcHJvbWV0aGV1cwogIHN0YXRpY19jb25maWdzOgogIC0gdGFyZ2V0czoKICAgIC0gMTI3LjAuMC4xOjkwOTAKLSBqb2JfbmFtZTogZGI3OTEzOTAtMTBjZS00OTRkLTlkMzctMTkyYmIyMmM3ODM1CiAgc3RhdGljX2NvbmZpZ3M6CiAgLSB0YXJnZXRzOgogICAgLSAxOTIuMTY4LjUuMjEzOjMwMDkwCiAgcGFyYW1zOgogIC0gbWF0Y2hbXToKICAgIC0gJyAnJ21hdGNoW106e19fbmFtZV9fPX4iY29udGFpbmVyX21lbW9yeV91c2FnZV9ieXRlc3xjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWwiLAogICAgICBjb250YWluZXI9fiJyMTIzNDU2In0nJycKICBtZXRyaWNzX3BhdGg6IC9mZWRlcmF0ZQo=";
        String expected =
                "LSBqb2JfbmFtZTogcHJvbWV0aGV1cwogIHN0YXRpY19jb25maWdzOgogIC0gdGFyZ2V0czoKICAgIC0gMTI3LjAuMC4xOjkwOTAK";

        Map<String, String> data = new HashMap<>();
        data.put(ApplicationProperties.PROMETHEUS_YML_FILE, prometheusBase64);

        Secret secret = new Secret();
        secret.setData(data);

        DeleteTelemetryData deleteTelemetryData = new DeleteTelemetryData();
        deleteTelemetryData.setServiceId(UUID.fromString("db791390-10ce-494d-9d37-192bb22c7835"));

        CloudEventDeleteServiceTelemetry deleteServiceTelemetry =
                new CloudEventDeleteServiceTelemetry();
        deleteServiceTelemetry.setDeleteTelemetryData(deleteTelemetryData);

        Secret newSecret = editSecretService.deletePrometheusJob(secret, deleteServiceTelemetry);

        assertEquals(newSecret.getData().get(PROMETHEUS_YML_FILE), expected);
    }
}
+95 −0
Original line number Original line Diff line number Diff line
package org.etsi.osl.hypo.clients.telemetry.service;

import static org.assertj.core.api.Assertions.assertThat;
import static org.etsi.osl.hypo.clients.telemetry.service.GrafanaService.FOLDER_NAME;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;

import io.quarkus.test.InjectMock;
import io.quarkus.test.junit.QuarkusTest;
import jakarta.inject.Inject;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.eclipse.microprofile.rest.client.inject.RestClient;
import org.etsi.osl.hypo.clients.telemetry.client.GrafanaClient;
import org.etsi.osl.hypo.clients.telemetry.model.grafana.GrafanaResponse;
import org.etsi.osl.hypo.clients.telemetry.service.GrafanaService;
import org.etsi.osl.hypo.core.common.telemetry.CloudEventUpdateServiceTelemetry;
import org.etsi.osl.hypo.core.common.telemetry.UpdateTelemetryData;
import org.junit.jupiter.api.Test;

@QuarkusTest
class GrafanaServiceTest {

    @Inject GrafanaService grafanaService;

    @InjectMock @RestClient GrafanaClient mock;

    @Test
    void createFolder() {

        GrafanaResponse grafanaResponse = new GrafanaResponse();
        grafanaResponse.setUid("uid");
        grafanaResponse.setTitle(FOLDER_NAME);

        when(mock.getFolders()).thenReturn(List.of(grafanaResponse));

        String actual = grafanaService.createFolder(FOLDER_NAME);
        String expected = "uid";

        assertEquals(actual, expected);
    }

    @Test
    void createFolderIfNotExists() {
        GrafanaResponse grafanaResponse = new GrafanaResponse();
        grafanaResponse.setTitle(FOLDER_NAME);
        grafanaResponse.setUid("UID");

        when(mock.getFolders()).thenReturn(new ArrayList<>());
        when(mock.createFolder(any())).thenReturn(grafanaResponse);

        String actual = grafanaService.createFolder(FOLDER_NAME);
        String expected = "UID";

        assertEquals(actual, expected);
    }

    @Test
    void createDashboard() {
        GrafanaResponse grafanaResponse = new GrafanaResponse();
        grafanaResponse.setUid("uid");
        grafanaResponse.setTitle(FOLDER_NAME);

        when(mock.getFolders()).thenReturn(List.of(grafanaResponse));

        List<String> namespaces = List.of("namespace1", "namespace2");

        CloudEventUpdateServiceTelemetry telemetryModel = new CloudEventUpdateServiceTelemetry();
        UpdateTelemetryData data = new UpdateTelemetryData();
        data.setServiceId(UUID.randomUUID());
        data.setNamespaces(namespaces);
        data.setRelatedPartyId(UUID.randomUUID());

        telemetryModel.setUpdateTelemetryData(data);

        GrafanaResponse expected = new GrafanaResponse();
        expected.setUid("uuidTest");

        when(mock.createDashboard(any())).thenReturn(expected);

        GrafanaResponse actual = grafanaService.createDashboard(telemetryModel);

        assertEquals(actual.getUid(), expected.getUid());
    }

    @Test
    void deleteDashboard() {
        when(mock.deleteDashboard(any())).thenReturn(new GrafanaResponse());
        GrafanaResponse grafanaResponse =
                grafanaService.deleteDashboard("dashboardId", "testServiceId");
        assertThat(grafanaResponse).isNotNull();
    }
}
Loading