Spaces:
Build error
Build error
File size: 4,855 Bytes
442299c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
package com.dalab.discovery.crawler.callable;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.jupiter.MockitoExtension;
import com.dalab.discovery.catalog.persistence.IResourceCrawlerRegistry;
import com.dalab.discovery.catalog.service.ICatalogService;
import com.dalab.discovery.common.model.CloudResource;
import com.dalab.discovery.common.model.DiscoveryJob;
import com.dalab.discovery.common.model.enums.CloudProvider;
import com.dalab.discovery.crawler.service.IResourceCrawler;
import com.dalab.discovery.job.JobType;
import com.dalab.discovery.job.callable.ResourceCrawlerCallable;
/**
* Unit tests for ResourceCrawlerCallable.
*/
@ExtendWith(MockitoExtension.class)
public class ResourceCrawlerCallableTest {
@Mock
private IResourceCrawlerRegistry crawlerRegistry;
@Mock
private IResourceCrawler<CloudResource> crawler1;
@Mock
private IResourceCrawler<CloudResource> crawler2;
@Mock
private ICatalogService catalogService;
private DiscoveryJob job;
private ResourceCrawlerCallable callable;
private AutoCloseable closeable;
@BeforeEach
void setUp() {
closeable = MockitoAnnotations.openMocks(this);
job = new DiscoveryJob(UUID.randomUUID());
job.setJobType(JobType.RESOURCE_CRAWLER);
job.setCloudProvider(CloudProvider.GCP);
job.setAccountId("test-account");
callable = new ResourceCrawlerCallable(job, crawlerRegistry, catalogService);
}
@AfterEach
void tearDown() throws Exception {
closeable.close();
}
@Test
void call_NoCrawlersFound_ReturnsFalse() throws Exception {
when(crawlerRegistry.getCrawlersForProvider(CloudProvider.GCP)).thenReturn(List.of());
Boolean result = callable.call();
assertFalse(result);
verify(crawlerRegistry).getCrawlersForProvider(CloudProvider.GCP);
verifyNoInteractions(crawler1, crawler2, catalogService);
}
@Test
void call_CrawlersFound_TriggersCrawlersAndReturnsTrue() throws Exception {
when(crawlerRegistry.getCrawlersForProvider(CloudProvider.GCP)).thenReturn(List.of(crawler1, crawler2));
doNothing().when(crawler1).discoverResourcesAsync(eq("test-account"), anyMap());
doNothing().when(crawler2).discoverResourcesAsync(eq("test-account"), anyMap());
Boolean result = callable.call();
assertTrue(result);
verify(crawlerRegistry).getCrawlersForProvider(CloudProvider.GCP);
verify(crawler1).discoverResourcesAsync(eq("test-account"), anyMap());
verify(crawler2).discoverResourcesAsync(eq("test-account"), anyMap());
}
@Test
void call_WithSpecificResourceTypes_UsesGetCrawlersForTypes() throws Exception {
List<String> typeNames = List.of("type1", "type2");
job.setParameters(Map.of("resourceTypesToCrawl", typeNames));
callable = new ResourceCrawlerCallable(job, crawlerRegistry, catalogService);
when(crawlerRegistry.getCrawlersForTypes(eq(CloudProvider.GCP), anyList())).thenReturn(List.of(crawler1));
doNothing().when(crawler1).discoverResourcesAsync(eq("test-account"), anyMap());
Boolean result = callable.call();
assertTrue(result);
verify(crawlerRegistry).getCrawlersForTypes(eq(CloudProvider.GCP), anyList());
verify(crawlerRegistry, never()).getCrawlersForProvider(any());
verify(crawler1).discoverResourcesAsync(eq("test-account"), anyMap());
}
@Test
void call_CrawlerTriggerFails_ContinuesAndReturnsTrueIfAnySucceed() throws Exception {
when(crawlerRegistry.getCrawlersForProvider(CloudProvider.GCP)).thenReturn(List.of(crawler1, crawler2));
doThrow(new RuntimeException("Trigger failed!")).when(crawler1).discoverResourcesAsync(anyString(), anyMap());
doNothing().when(crawler2).discoverResourcesAsync(eq("test-account"), anyMap());
Boolean result = callable.call();
assertTrue(result);
verify(crawler1).discoverResourcesAsync(eq("test-account"), anyMap());
verify(crawler2).discoverResourcesAsync(eq("test-account"), anyMap());
}
@Test
void call_AllCrawlerTriggersFail_ReturnsFalse() throws Exception {
when(crawlerRegistry.getCrawlersForProvider(CloudProvider.GCP)).thenReturn(List.of(crawler1, crawler2));
doThrow(new RuntimeException("Trigger failed!")).when(crawler1).discoverResourcesAsync(anyString(), anyMap());
doThrow(new RuntimeException("Trigger failed too!")).when(crawler2).discoverResourcesAsync(anyString(),
anyMap());
Boolean result = callable.call();
assertFalse(result);
verify(crawler1).discoverResourcesAsync(eq("test-account"), anyMap());
verify(crawler2).discoverResourcesAsync(eq("test-account"), anyMap());
}
} |