/* * Copyright (c) 2012-2015 iWave Software LLC * All Rights Reserved */ package com.emc.sa.service; import java.io.IOException; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.emc.sa.asset.AssetOptionsManagerImpl; import com.emc.sa.asset.AssetOptionsProvider; import com.emc.sa.descriptor.AbstractServiceDescriptors; import com.emc.sa.descriptor.ServiceDefinition; import com.emc.sa.descriptor.ServiceDefinitionLoader; import com.emc.sa.descriptor.ServiceDescriptor; import com.emc.sa.descriptor.ServiceField; /** * Test for verifying all the types in all service descriptors are valid. */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({ "ServiceDescriptorAssetTest.xml" }) public class ServiceDescriptorAssetTest { @Autowired private AssetOptionsManagerImpl assetManager; @Test public void testAssetManager() throws IOException { TestServiceDescriptors serviceDescriptors = new TestServiceDescriptors(); for (ServiceDescriptor descriptor : serviceDescriptors.listDescriptors(Locale.getDefault())) { verifyAssetFields(descriptor); } } private void verifyAssetFields(ServiceDescriptor descriptor) { Set<String> allAssetTypes = descriptor.getAllAssetTypes(); for (ServiceField field : descriptor.getAllFieldList()) { if (!field.isAsset()) { continue; } String assetType = field.getAssetType(); AssetOptionsProvider provider = assetManager.getProviderForAssetType(assetType); if (provider == null) { Assert.fail(String.format("%s [%s]: No provider found for type: %s", descriptor.getTitle(), field.getName(), assetType)); } try { List<String> assetDependencies = provider.getAssetDependencies(assetType, allAssetTypes); for (String assetDependency : assetDependencies) { AssetOptionsProvider dependencyProvider = assetManager.getProviderForAssetType(assetDependency); if (dependencyProvider == null) { Assert.fail(String.format("%s [%s]: No provider found for dependency '%s' of type: %s", descriptor.getTitle(), field.getName(), assetDependency, assetType)); } } } catch (IllegalStateException e) { Assert.fail(String.format("%s [%s]: Could not query dependencies of type: %s, provided: %s", descriptor.getTitle(), field.getName(), assetType, allAssetTypes)); } } } private static class TestServiceDescriptors extends AbstractServiceDescriptors { Map<String, ServiceDefinition> definitions; public TestServiceDescriptors() throws IOException { definitions = new HashMap<>(); ClassLoader cl = Thread.currentThread().getContextClassLoader(); for (ServiceDefinition definition : ServiceDefinitionLoader.load(cl)) { definitions.put(definition.serviceId, definition); } } @Override protected Collection<ServiceDefinition> getServiceDefinitions() { return definitions.values(); } @Override protected ServiceDefinition getServiceDefinition(String serviceId) { return definitions.get(serviceId); } } }