package com.thinkbiganalytics.feedmgr.config;
/*-
* #%L
* thinkbig-feed-manager-controller
* %%
* Copyright (C) 2017 ThinkBig Analytics
* %%
* 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.
* #L%
*/
import com.thinkbiganalytics.cluster.ClusterService;
import com.thinkbiganalytics.cluster.JGroupsClusterService;
import com.thinkbiganalytics.feedmgr.nifi.NifiConnectionService;
import com.thinkbiganalytics.feedmgr.nifi.cache.NifiFlowCache;
import com.thinkbiganalytics.feedmgr.nifi.PropertyExpressionResolver;
import com.thinkbiganalytics.feedmgr.nifi.SpringEnvironmentProperties;
import com.thinkbiganalytics.feedmgr.nifi.cache.NifiFlowCacheClusterManager;
import com.thinkbiganalytics.feedmgr.rest.Model;
import com.thinkbiganalytics.feedmgr.service.AccessControlledEntityTransform;
import com.thinkbiganalytics.feedmgr.service.EncryptionService;
import com.thinkbiganalytics.feedmgr.service.MetadataService;
import com.thinkbiganalytics.feedmgr.service.category.CategoryModelTransform;
import com.thinkbiganalytics.feedmgr.service.category.FeedManagerCategoryService;
import com.thinkbiganalytics.feedmgr.service.category.InMemoryFeedManagerCategoryService;
import com.thinkbiganalytics.feedmgr.service.feed.FeedManagerFeedService;
import com.thinkbiganalytics.feedmgr.service.feed.FeedModelTransform;
import com.thinkbiganalytics.feedmgr.service.feed.InMemoryFeedManagerFeedService;
import com.thinkbiganalytics.feedmgr.service.template.FeedManagerTemplateService;
import com.thinkbiganalytics.feedmgr.service.template.InMemoryFeedManagerTemplateService;
import com.thinkbiganalytics.feedmgr.service.template.RegisteredTemplateService;
import com.thinkbiganalytics.feedmgr.service.template.RegisteredTemplateUtil;
import com.thinkbiganalytics.feedmgr.service.template.TemplateModelTransform;
import com.thinkbiganalytics.feedmgr.sla.ServiceLevelAgreementModelTransform;
import com.thinkbiganalytics.feedmgr.sla.ServiceLevelAgreementService;
import com.thinkbiganalytics.hive.service.HiveService;
import com.thinkbiganalytics.kerberos.KerberosTicketConfiguration;
import com.thinkbiganalytics.metadata.api.MetadataAccess;
import com.thinkbiganalytics.metadata.api.MetadataAction;
import com.thinkbiganalytics.metadata.api.MetadataCommand;
import com.thinkbiganalytics.metadata.api.MetadataExecutionException;
import com.thinkbiganalytics.metadata.api.MetadataRollbackAction;
import com.thinkbiganalytics.metadata.api.MetadataRollbackCommand;
import com.thinkbiganalytics.metadata.api.app.KyloVersionProvider;
import com.thinkbiganalytics.metadata.api.category.CategoryProvider;
import com.thinkbiganalytics.metadata.api.datasource.DatasourceProvider;
import com.thinkbiganalytics.metadata.api.feed.FeedProvider;
import com.thinkbiganalytics.metadata.api.security.HadoopSecurityGroupProvider;
import com.thinkbiganalytics.metadata.api.sla.FeedServiceLevelAgreementProvider;
import com.thinkbiganalytics.metadata.api.template.FeedManagerTemplateProvider;
import com.thinkbiganalytics.metadata.core.dataset.InMemoryDatasourceProvider;
import com.thinkbiganalytics.metadata.core.feed.InMemoryFeedProvider;
import com.thinkbiganalytics.metadata.jpa.cluster.NiFiFlowCacheClusterUpdateProvider;
import com.thinkbiganalytics.metadata.modeshape.JcrMetadataAccess;
import com.thinkbiganalytics.metadata.modeshape.MetadataJcrConfigurator;
import com.thinkbiganalytics.metadata.sla.api.ServiceLevelAgreement;
import com.thinkbiganalytics.metadata.sla.spi.ServiceLevelAgreementProvider;
import com.thinkbiganalytics.metadata.sla.spi.ServiceLevelAgreementScheduler;
import com.thinkbiganalytics.metadata.sla.spi.core.InMemorySLAProvider;
import com.thinkbiganalytics.nifi.rest.client.LegacyNifiRestClient;
import com.thinkbiganalytics.nifi.rest.client.NiFiRestClient;
import com.thinkbiganalytics.nifi.rest.client.NifiRestClientConfig;
import com.thinkbiganalytics.nifi.rest.model.NiFiPropertyDescriptorTransform;
import com.thinkbiganalytics.nifi.v1.rest.client.NiFiRestClientV1;
import com.thinkbiganalytics.nifi.v1.rest.model.NiFiPropertyDescriptorTransformV1;
import com.thinkbiganalytics.security.AccessController;
import com.thinkbiganalytics.security.rest.controller.SecurityModelTransform;
import com.thinkbiganalytics.security.service.user.UserService;
import org.mockito.Mockito;
import org.modeshape.jcr.ModeShapeEngine;
import org.modeshape.jcr.api.txn.TransactionManagerLookup;
import org.springframework.cloud.config.server.encryption.EncryptionController;
import org.springframework.cloud.config.server.encryption.SingleTextEncryptorLocator;
import org.springframework.cloud.config.server.encryption.TextEncryptorLocator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.jdbc.core.JdbcTemplate;
import java.security.Principal;
import java.util.Properties;
import javax.jcr.Credentials;
import javax.jcr.Repository;
/**
*/
@Configuration
public class TestSpringConfiguration {
@Bean
public static PropertySourcesPlaceholderConfigurer properties() throws Exception {
final PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
Properties properties = new Properties();
properties.setProperty("nifi.remove.inactive.versioned.feeds", "true");
propertySourcesPlaceholderConfigurer.setProperties(properties);
return propertySourcesPlaceholderConfigurer;
}
@Bean
public AccessController accessController() {
return Mockito.mock(AccessController.class);
}
@Bean
public FeedServiceLevelAgreementProvider feedServiceLevelAgreementProvider() {
return Mockito.mock(FeedServiceLevelAgreementProvider.class);
}
@Bean
public ServiceLevelAgreementService serviceLevelAgreementService() {
return new ServiceLevelAgreementService();
}
@Bean
public ServiceLevelAgreementProvider serviceLevelAgreementProvider() {
return new InMemorySLAProvider();
}
@Bean
public NifiFlowCache nifiFlowCache() {
return new NifiFlowCache();
}
@Bean
public ModeShapeEngine modeShapeEngine() {
return Mockito.mock(ModeShapeEngine.class);
}
@Bean
public MetadataJcrConfigurator metadataJcrConfigurator() {
return Mockito.mock(MetadataJcrConfigurator.class);
}
@Bean
public MetadataService metadataService() {
return Mockito.mock(MetadataService.class);
}
@Bean
public NifiConnectionService nifiConnectionService() {
return new NifiConnectionService();
}
@Bean
public ServiceLevelAgreementScheduler serviceLevelAgreementScheduler() {
return new ServiceLevelAgreementScheduler() {
@Override
public void scheduleServiceLevelAgreement(ServiceLevelAgreement sla) {
}
@Override
public void enableServiceLevelAgreement(ServiceLevelAgreement sla) {
}
@Override
public void disableServiceLevelAgreement(ServiceLevelAgreement sla) {
}
@Override
public boolean unscheduleServiceLevelAgreement(ServiceLevelAgreement.ID slaId) {
return false;
}
@Override
public boolean unscheduleServiceLevelAgreement(ServiceLevelAgreement sla) {
return false;
}
};
}
@Bean
FeedProvider feedProvider() {
return new InMemoryFeedProvider();
}
@Bean(name = "metadataJcrRepository")
public Repository repository() {
return Mockito.mock(Repository.class);
}
@Bean
public TransactionManagerLookup txnLookup() {
return Mockito.mock(TransactionManagerLookup.class);
}
@Bean
public JcrMetadataAccess jcrMetadataAccess() {
// Transaction behavior not enforced in memory-only mode;
return new JcrMetadataAccess() {
@Override
public <R> R commit(MetadataCommand<R> cmd, Principal... principals) {
try {
return cmd.execute();
} catch (Exception e) {
throw new MetadataExecutionException(e);
}
}
@Override
public <R> R read(MetadataCommand<R> cmd, Principal... principals) {
try {
return cmd.execute();
} catch (Exception e) {
throw new MetadataExecutionException(e);
}
}
@Override
public <R> R commit(Credentials creds, MetadataCommand<R> cmd) {
try {
return cmd.execute();
} catch (Exception e) {
throw new MetadataExecutionException(e);
}
}
@Override
public <R> R commit(MetadataCommand<R> cmd, MetadataRollbackCommand rollbackCmd, Principal... principals) {
return commit(cmd, principals);
}
@Override
public void commit(MetadataAction action, MetadataRollbackAction rollbackAction, Principal... principals) {
commit(action, principals);
}
@Override
public <R> R read(Credentials creds, MetadataCommand<R> cmd) {
try {
return cmd.execute();
} catch (Exception e) {
throw new MetadataExecutionException(e);
}
}
};
}
@Bean
MetadataAccess metadataAccess() {
// Transaction behavior not enforced in memory-only mode;
return new MetadataAccess() {
@Override
public <R> R commit(MetadataCommand<R> cmd, Principal... principals) {
try {
return cmd.execute();
} catch (Exception e) {
throw new MetadataExecutionException(e);
}
}
@Override
public <R> R read(MetadataCommand<R> cmd, Principal... principals) {
try {
return cmd.execute();
} catch (Exception e) {
throw new MetadataExecutionException(e);
}
}
@Override
public void commit(MetadataAction action, Principal... principals) {
try {
action.execute();
} catch (Exception e) {
throw new MetadataExecutionException(e);
}
}
@Override
public <R> R commit(MetadataCommand<R> cmd, MetadataRollbackCommand rollbackCmd, Principal... principals) {
return commit(cmd, principals);
}
@Override
public void commit(MetadataAction action, MetadataRollbackAction rollbackAction, Principal... principals) {
commit(action, principals);
}
@Override
public void read(MetadataAction cmd, Principal... principals) {
try {
cmd.execute();
} catch (Exception e) {
throw new MetadataExecutionException(e);
}
}
};
}
@Bean
public DatasourceProvider datasetProvider() {
return new InMemoryDatasourceProvider();
}
@Bean
public FeedManagerFeedService feedManagerFeedService() {
return new InMemoryFeedManagerFeedService();
}
@Bean
public FeedManagerCategoryService feedManagerCategoryService() {
return new InMemoryFeedManagerCategoryService();
}
@Bean
FeedManagerTemplateService feedManagerTemplateService() {
return new InMemoryFeedManagerTemplateService();
}
@Bean
NifiRestClientConfig nifiRestClientConfig() {
return new NifiRestClientConfig();
}
@Bean
PropertyExpressionResolver propertyExpressionResolver() {
return new PropertyExpressionResolver();
}
@Bean
SpringEnvironmentProperties springEnvironmentProperties() {
return new SpringEnvironmentProperties();
}
@Bean
public LegacyNifiRestClient legacyNifiRestClient() {
return new LegacyNifiRestClient();
}
@Bean
NiFiRestClient niFiRestClient() {
return new NiFiRestClientV1(nifiRestClientConfig());
}
@Bean
NiFiPropertyDescriptorTransform propertyDescriptorTransform() {
return new NiFiPropertyDescriptorTransformV1();
}
@Bean
RegisteredTemplateUtil registeredTemplateUtil() {
return new RegisteredTemplateUtil();
}
@Bean
RegisteredTemplateService registeredTemplateService() {
return new RegisteredTemplateService();
}
@Bean
FeedModelTransform feedModelTransform() {
return new FeedModelTransform();
}
@Bean
CategoryModelTransform categoryModelTransform() {
return new CategoryModelTransform();
}
@Bean
CategoryProvider feedManagerCategoryProvider() {
return new Mockito().mock(CategoryProvider.class);
}
@Bean
FeedManagerTemplateProvider feedManagerTemplateProvider() {
return new Mockito().mock(FeedManagerTemplateProvider.class);
}
@Bean(name = "hiveJdbcTemplate")
JdbcTemplate hiveJdbcTemplate() {
return new Mockito().mock(JdbcTemplate.class);
}
@Bean(name = "kerberosHiveConfiguration")
KerberosTicketConfiguration kerberosHiveConfiguration() {
return new KerberosTicketConfiguration();
}
@Bean
HadoopSecurityGroupProvider hadoopSecurityGroupProvider() {
return new Mockito().mock(HadoopSecurityGroupProvider.class);
}
@Bean
HiveService hiveService() {
return new Mockito().mock(HiveService.class);
}
@Bean
TemplateModelTransform templateModelTransform() {
return new TemplateModelTransform();
}
@Bean
EncryptionService encryptionService() {
return new EncryptionService();
}
@Bean
TextEncryptorLocator textEncryptorLocator() {
return new SingleTextEncryptorLocator(null);
}
@Bean
EncryptionController encryptionController() {
return new EncryptionController(textEncryptorLocator());
}
@Bean
ServiceLevelAgreementModelTransform serviceLevelAgreementModelTransform() {
return new ServiceLevelAgreementModelTransform(Mockito.mock(Model.class));
}
@Bean
AccessControlledEntityTransform accessControlledEntityTransform() {
return Mockito.mock(AccessControlledEntityTransform.class);
}
@Bean
SecurityModelTransform actionsTransform() {
return Mockito.mock(SecurityModelTransform.class);
}
@Bean
UserService userService() {
return Mockito.mock(UserService.class);
}
@Bean
KyloVersionProvider kyloVersionProvider() {
return Mockito.mock(KyloVersionProvider.class);
}
@Bean
ClusterService clusterService() {
return new JGroupsClusterService();
}
@Bean
NifiFlowCacheClusterManager nifiFlowCacheClusterManager() {
return Mockito.mock(NifiFlowCacheClusterManager.class);
}
@Bean
NiFiFlowCacheClusterUpdateProvider niFiFlowCacheClusterUpdateProvider(){
return Mockito.mock(NiFiFlowCacheClusterUpdateProvider.class);
}
}