/*
*
* Copyright 2016 Netflix, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.netflix.genie.web.configs;
import com.netflix.genie.common.exceptions.GenieException;
import com.netflix.genie.core.jobs.workflow.WorkflowTask;
import com.netflix.genie.core.jpa.repositories.JpaApplicationRepository;
import com.netflix.genie.core.jpa.repositories.JpaClusterRepository;
import com.netflix.genie.core.jpa.repositories.JpaCommandRepository;
import com.netflix.genie.core.jpa.repositories.JpaJobExecutionRepository;
import com.netflix.genie.core.jpa.repositories.JpaJobMetadataRepository;
import com.netflix.genie.core.jpa.repositories.JpaJobRepository;
import com.netflix.genie.core.jpa.repositories.JpaJobRequestRepository;
import com.netflix.genie.core.properties.JobsProperties;
import com.netflix.genie.core.services.ApplicationService;
import com.netflix.genie.core.services.ClusterLoadBalancer;
import com.netflix.genie.core.services.ClusterService;
import com.netflix.genie.core.services.CommandService;
import com.netflix.genie.core.services.JobKillService;
import com.netflix.genie.core.services.JobPersistenceService;
import com.netflix.genie.core.services.JobSearchService;
import com.netflix.genie.core.services.JobStateService;
import com.netflix.genie.test.categories.UnitTest;
import com.netflix.spectator.api.Registry;
import org.apache.commons.exec.Executor;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.mockito.Mockito;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.event.ApplicationEventMulticaster;
import org.springframework.core.io.Resource;
import org.springframework.mail.javamail.JavaMailSender;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
* Unit Tests for ServicesConfig class.
*
* @author amsharma
* @since 3.0.0
*/
@Category(UnitTest.class)
public class ServicesConfigUnitTests {
private JpaApplicationRepository applicationRepository;
private JpaClusterRepository clusterRepository;
private JpaCommandRepository commandRepository;
private JpaJobExecutionRepository jobExecutionRepository;
private JpaJobRepository jobRepository;
private JpaJobRequestRepository jobRequestRepository;
private JobSearchService jobSearchService;
private ServicesConfig servicesConfig;
/**
* Setup to run before each test.
*/
@Before
public void setUp() {
this.applicationRepository = Mockito.mock(JpaApplicationRepository.class);
this.clusterRepository = Mockito.mock(JpaClusterRepository.class);
this.commandRepository = Mockito.mock(JpaCommandRepository.class);
this.jobRepository = Mockito.mock(JpaJobRepository.class);
this.jobRequestRepository = Mockito.mock(JpaJobRequestRepository.class);
this.jobExecutionRepository = Mockito.mock(JpaJobExecutionRepository.class);
this.jobSearchService = Mockito.mock(JobSearchService.class);
this.servicesConfig = new ServicesConfig();
}
/**
* Confirm we can get a cluster load balancer.
*/
@Test
public void canGetClusterLoadBalancer() {
Assert.assertNotNull(this.servicesConfig.clusterLoadBalancer());
}
/**
* Confirm we can get a GenieFileTransfer instance.
*
* @throws GenieException If there is any problem.
*/
@Test
public void canGetGenieFileTransfer() throws GenieException {
Assert.assertNotNull(this.servicesConfig.genieFileTransferService(scheme -> null));
}
/**
* Confirm we can get a default mail service implementation.
*/
@Test
public void canGetDefaultMailServiceImpl() {
Assert.assertNotNull(this.servicesConfig.getDefaultMailServiceImpl());
}
/**
* Confirm we can get a mail service implementation using JavaMailSender.
*/
@Test
public void canGetMailServiceImpl() {
final JavaMailSender javaMailSender = Mockito.mock(JavaMailSender.class);
Assert.assertNotNull(this.servicesConfig.getJavaMailSenderMailService(javaMailSender, "fromAddress"));
}
/**
* Can get a bean for Application Service.
*/
@Test
public void canGetApplicationServiceBean() {
Assert.assertNotNull(
this.servicesConfig.applicationService(
this.applicationRepository,
this.commandRepository
)
);
}
/**
* Can get a bean for Command Service.
*/
@Test
public void canGetCommandServiceBean() {
Assert.assertNotNull(
this.servicesConfig.commandService(
this.commandRepository,
this.applicationRepository,
this.clusterRepository
)
);
}
/**
* Can get a bean for Cluster Service.
*/
@Test
public void canGetClusterServiceBean() {
Assert.assertNotNull(
this.servicesConfig.clusterService(
this.clusterRepository,
this.commandRepository
)
);
}
/**
* Can get a bean for Job Search Service.
*/
@Test
public void canGetJobSearchServiceBean() {
Assert.assertNotNull(
this.servicesConfig.jobSearchService(
this.jobRepository,
this.jobRequestRepository,
this.jobExecutionRepository,
Mockito.mock(JpaClusterRepository.class),
Mockito.mock(JpaCommandRepository.class)
)
);
}
/**
* Can get a bean for Job Persistence Service.
*/
@Test
public void canGetJobPersistenceServiceBean() {
Assert.assertNotNull(
this.servicesConfig.jobPersistenceService(
this.jobRepository,
this.jobRequestRepository,
Mockito.mock(JpaJobMetadataRepository.class),
jobExecutionRepository,
this.applicationRepository,
this.clusterRepository,
this.commandRepository
)
);
}
/**
* Can get a bean for Job Submitter Service.
*/
@Test
public void canGetJobSubmitterServiceBean() {
final JobPersistenceService jobPersistenceService = Mockito.mock(JobPersistenceService.class);
final ApplicationEventPublisher eventPublisher = Mockito.mock(ApplicationEventPublisher.class);
final ApplicationEventMulticaster eventMulticaster = Mockito.mock(ApplicationEventMulticaster.class);
final Resource resource = Mockito.mock(Resource.class);
final List<WorkflowTask> workflowTasks = new ArrayList<>();
Assert.assertNotNull(
this.servicesConfig.jobSubmitterService(
jobPersistenceService,
eventPublisher,
eventMulticaster,
workflowTasks,
resource,
Mockito.mock(Registry.class)
)
);
}
/**
* Can get a bean for Job Coordinator Service.
*/
@Test
public void canGetJobCoordinatorServiceBean() {
Assert.assertNotNull(
this.servicesConfig.jobCoordinatorService(
Mockito.mock(JobPersistenceService.class),
Mockito.mock(JobKillService.class),
Mockito.mock(JobStateService.class),
new JobsProperties(),
Mockito.mock(ApplicationService.class),
Mockito.mock(ClusterService.class),
Mockito.mock(CommandService.class),
Mockito.mock(ClusterLoadBalancer.class),
Mockito.mock(Registry.class),
UUID.randomUUID().toString()
)
);
}
/**
* Can get a bean for Job Kill Service.
*/
@Test
public void canGetJobKillServiceBean() {
Assert.assertNotNull(
this.servicesConfig.jobKillService(
"localhost",
this.jobSearchService,
Mockito.mock(Executor.class),
new JobsProperties(),
Mockito.mock(ApplicationEventPublisher.class)
)
);
}
}