Merge "Update Working with SO Docker Documentation"
authorSteve Smokowski <ss835w@att.com>
Thu, 14 Feb 2019 16:32:13 +0000 (16:32 +0000)
committerGerrit Code Review <gerrit@onap.org>
Thu, 14 Feb 2019 16:32:13 +0000 (16:32 +0000)
33 files changed:
adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoHeatUtils.java
adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoKeystoneUtils.java
adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoNeutronUtils.java
adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/HeatStackAudit.java
adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/audit/HeatStackAuditTest.java
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/resource/ResourceRequestBuilder.java
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/dmaapproperties/GlobalDmaapPublisher.java
bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/resource/ResourceRequestBuilderTest.java
bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/dmaapproperties/GlobalDmaapPublisherTest.java
bpmn/MSOCommonBPMN/src/test/resources/application-test.yaml
bpmn/mso-infrastructure-bpmn/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/AaiConnectionTestImpl.java
bpmn/mso-infrastructure-bpmn/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/CreateAndActivatePnfResourceTest.java
bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/pnf/aai/AaiConnectionImpl.java
bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/pnf/delegate/CreateRelation.java [new file with mode: 0644]
bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/pnf/implementation/AaiConnection.java
bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/AaiConnectionTestImpl.java
bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/AaiConnectionThrowingException.java
bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/CreateRelationTest.java [new file with mode: 0644]
bpmn/so-bpmn-infrastructure-flows/src/main/resources/process/CreateAndActivatePnfResource.bpmn
common/src/main/java/org/onap/so/client/dmaap/DmaapClient.java
common/src/main/java/org/onap/so/client/dmaap/rest/DMaaPRestClient.java
common/src/main/java/org/onap/so/client/dmaap/rest/PropertiesBean.java
common/src/main/java/org/onap/so/client/dmaap/rest/RestConsumer.java
common/src/main/java/org/onap/so/client/dmaap/rest/RestPublisher.java
common/src/main/java/org/onap/so/client/ruby/dmaap/RubyCreateTicketRequestPublisher.java
common/src/main/java/org/onap/so/client/sdno/dmaap/SDNOHealthCheckDmaapConsumer.java
common/src/main/java/org/onap/so/client/sdno/dmaap/SDNOHealthCheckDmaapPublisher.java
common/src/test/java/org/onap/so/client/dmaap/DmaapPublisherTest.java
common/src/test/resources/dmaap.properties
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/dmaap/DmaapPropertiesImpl.java
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/dmaap/OperationalEnvironmentPublisher.java
mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/tenantisolation/dmaap/OperationalEnvironmentPublisherTest.java
mso-api-handlers/mso-api-handler-infra/src/test/resources/application-test.yaml

index 14aee2f..20498cb 100644 (file)
@@ -103,13 +103,6 @@ public class MsoHeatUtils extends MsoCommonUtils implements VduPlugin{
 
     protected static final String CREATE_STACK = "CreateStack";
 
-    // Cache Heat Clients statically. Since there is just one MSO user, there is no
-    // benefit to re-authentication on every request (or across different flows). The
-    // token will be used until it expires.
-    //
-    // The cache key is "tenantId:cloudId"
-    private static Map <String, HeatCacheEntry> heatClientCache = new HashMap <> ();
-
     // Fetch cloud configuration each time (may be cached in CloudConfig class)
     @Autowired
     protected CloudConfig cloudConfig;
@@ -859,19 +852,6 @@ public class MsoHeatUtils extends MsoCommonUtils implements VduPlugin{
         String cloudId = cloudSite.getId();
         // For DCP/LCP, the region should be the cloudId.
         String region = cloudSite.getRegionId ();
-        
-        // Check first in the cache of previously authorized clients
-        String cacheKey = cloudId + ":" + tenantId;
-        if (heatClientCache.containsKey (cacheKey)) {
-            if (!heatClientCache.get (cacheKey).isExpired ()) {
-                LOGGER.debug ("Using Cached HEAT Client for " + cacheKey);
-                return heatClientCache.get (cacheKey).getHeatClient ();
-            } else {
-                // Token is expired. Remove it from cache.
-                heatClientCache.remove (cacheKey);
-                LOGGER.debug ("Expired Cached HEAT Client for " + cacheKey);
-            }
-        }
 
         // Obtain an MSO token for the tenant
         CloudIdentity cloudIdentity = cloudSite.getIdentityService();
@@ -946,38 +926,11 @@ public class MsoHeatUtils extends MsoCommonUtils implements VduPlugin{
             // Catch-all
             throw runtimeExceptionToMsoException (e, TOKEN_AUTH);
         }
-
         Heat heatClient = new Heat (heatUrl);
         heatClient.token (tokenId);
-
-        heatClientCache.put (cacheKey,
-                             new HeatCacheEntry (heatUrl,
-                                                 tokenId,
-                                                 expiration));
-        LOGGER.debug ("Caching HEAT Client for " + cacheKey);
-
         return heatClient;
     }
 
-    /**
-     * Forcibly expire a HEAT client from the cache. This call is for use by
-     * the KeystoneClient in case where a tenant is deleted. In that case,
-     * all cached credentials must be purged so that fresh authentication is
-     * done if a similarly named tenant is re-created.
-     * <p>
-     * Note: This is probably only applicable to dev/test environments where
-     * the same Tenant Name is repeatedly used for creation/deletion.
-     * <p>
-     *
-     */
-    public void expireHeatClient (String tenantId, String cloudId) {
-        String cacheKey = cloudId + ":" + tenantId;
-        if (heatClientCache.containsKey (cacheKey)) {
-            heatClientCache.remove (cacheKey);
-            LOGGER.debug ("Deleted Cached HEAT Client for " + cacheKey);
-        }
-    }
-
     /*
      * Query for a Heat Stack. This function is needed in several places, so
      * a common method is useful. This method takes an authenticated Heat Client
index 3936ae6..0bd2a39 100644 (file)
@@ -59,12 +59,6 @@ import com.woorea.openstack.keystone.utils.KeystoneUtils;
 @Component
 public class MsoKeystoneUtils extends MsoTenantUtils {
 
-    // Cache the Keystone Clients statically. Since there is just one MSO user, there is no
-    // benefit to re-authentication on every request (or across different flows). The
-    // token will be used until it expires.
-    //
-    // The cache key is "cloudId"
-    private static Map <String, KeystoneCacheEntry> adminClientCache = new HashMap<>();
 
        private static MsoLogger LOGGER = MsoLogger.getMsoLogger (MsoLogger.Catalog.RA, MsoKeystoneUtils.class);
        
@@ -316,10 +310,6 @@ public class MsoKeystoneUtils extends MsoTenantUtils {
             OpenStackRequest <Void> request = keystoneAdminClient.tenants ().delete (tenant.getId ());
             executeAndRecordOpenstackRequest (request);
             LOGGER.debug ("Deleted Tenant " + tenant.getId () + " (" + tenant.getName () + ")");
-
-            // Clear any cached clients. Not really needed, ID will not be reused.
-            msoHeatUtils.expireHeatClient (tenant.getId (), cloudSiteId);
-            msoNeutronUtils.expireNeutronClient (tenant.getId (), cloudSiteId);
         } catch (OpenStackBaseException e) {
             // Convert Keystone OpenStackResponseException to MsoOpenstackException
             throw keystoneErrorToMsoException (e, "Delete Tenant");
@@ -369,9 +359,6 @@ public class MsoKeystoneUtils extends MsoTenantUtils {
 
             LOGGER.debug ("Deleted Tenant " + tenant.getId () + " (" + tenant.getName () + ")");
 
-            // Clear any cached clients. Not really needed, ID will not be reused.
-            msoHeatUtils.expireHeatClient (tenant.getId (), cloudSiteId);
-            msoNeutronUtils.expireNeutronClient (tenant.getId (), cloudSiteId);
         } catch (OpenStackBaseException e) {
             // Note: It doesn't seem to matter if tenant doesn't exist, no exception is thrown.
             // Convert Keystone OpenStackResponseException to MsoOpenstackException
@@ -407,16 +394,6 @@ public class MsoKeystoneUtils extends MsoTenantUtils {
         String adminTenantName = cloudIdentity.getAdminTenant ();
         String region = cloudSite.getRegionId ();
 
-        // Check first in the cache of previously authorized clients
-        KeystoneCacheEntry entry = adminClientCache.get (cloudId);
-        if (entry != null) {
-            if (!entry.isExpired ()) {
-                return entry.getKeystoneClient ();
-            } else {
-                // Token is expired. Remove it from cache.
-                adminClientCache.remove (cloudId);
-            }
-        }
         MsoTenantUtils tenantUtils = tenantUtilsFactory.getTenantUtilsByServerType(cloudIdentity.getIdentityServerType());
         final String keystoneUrl = tenantUtils.getKeystoneUrl(region, cloudIdentity);
         Keystone keystone = new Keystone(keystoneUrl);
@@ -462,11 +439,6 @@ public class MsoKeystoneUtils extends MsoTenantUtils {
         // Note: this doesn't go back to Openstack, it's just a local object.
         keystone = new Keystone (adminUrl);
         keystone.token (token);
-
-        // Cache to avoid re-authentication for every call.
-        KeystoneCacheEntry cacheEntry = new KeystoneCacheEntry (adminUrl, token, access.getToken ().getExpires ());
-        adminClientCache.put (cloudId, cacheEntry);
-
         return keystone;
     }
 
@@ -636,32 +608,6 @@ public class MsoKeystoneUtils extends MsoTenantUtils {
         return null;
     }
 
-    private static class KeystoneCacheEntry implements Serializable {
-
-        private static final long serialVersionUID = 1L;
-
-        private String keystoneUrl;
-        private String token;
-        private Calendar expires;
-
-        public KeystoneCacheEntry (String url, String token, Calendar expires) {
-            this.keystoneUrl = url;
-            this.token = token;
-            this.expires = expires;
-        }
-
-        public Keystone getKeystoneClient () {
-            Keystone keystone = new Keystone (keystoneUrl);
-            keystone.token (token);
-            return keystone;
-        }
-
-        public boolean isExpired () {
-            // adding arbitrary guard timer of 5 minutes
-            return expires == null || System.currentTimeMillis() > (expires.getTimeInMillis() - 1800000);
-        }
-    }
-
        @Override
        public String getKeystoneUrl(String regionId, CloudIdentity cloudIdentity) throws MsoException {
                return cloudIdentity.getIdentityUrl();
index 7b82ad6..785e860 100644 (file)
@@ -67,12 +67,6 @@ import com.woorea.openstack.quantum.model.Segment;
 @Component
 public class MsoNeutronUtils extends MsoCommonUtils
 {
-       // Cache Neutron Clients statically.  Since there is just one MSO user, there is no
-       // benefit to re-authentication on every request (or across different flows).  The
-       // token will be used until it expires.
-       //
-       // The cache key is "tenantId:cloudId"
-       private static Map<String,NeutronCacheEntry> neutronClientCache = new HashMap<>();
 
        // Fetch cloud configuration each time (may be cached in CloudConfig class)
        @Autowired
@@ -364,24 +358,8 @@ public class MsoNeutronUtils extends MsoCommonUtils
     private Quantum getNeutronClient(CloudSite cloudSite, String tenantId) throws MsoException
        {
                String cloudId = cloudSite.getId();
-               String region = cloudSite.getRegionId();
-               
-               // Check first in the cache of previously authorized clients
-               String cacheKey = cloudId + ":" + tenantId;
-               if (neutronClientCache.containsKey(cacheKey)) {
-                       if (! neutronClientCache.get(cacheKey).isExpired()) {
-                               LOGGER.debug ("Using Cached HEAT Client for " + cacheKey);
-                               NeutronCacheEntry cacheEntry = neutronClientCache.get(cacheKey);
-                               Quantum neutronClient = new Quantum(cacheEntry.getNeutronUrl());
-                               neutronClient.token(cacheEntry.getToken());
-                               return neutronClient;
-                       }
-                       else {
-                               // Token is expired.  Remove it from cache.
-                               neutronClientCache.remove(cacheKey);
-                               LOGGER.debug ("Expired Cached Neutron Client for " + cacheKey);
-                       }
-               }
+               String region = cloudSite.getRegionId();        
+
 
                // Obtain an MSO token for the tenant from the identity service
                CloudIdentity cloudIdentity = cloudSite.getIdentityService();
@@ -454,31 +432,9 @@ public class MsoNeutronUtils extends MsoCommonUtils
 
                Quantum neutronClient = new Quantum(neutronUrl);
                neutronClient.token(tokenId);
-
-               neutronClientCache.put(cacheKey, new NeutronCacheEntry(neutronUrl, tokenId, expiration));
-               LOGGER.debug ("Caching Neutron Client for " + cacheKey);
-
                return neutronClient;
        }
 
-       /**
-        * Forcibly expire a Neutron client from the cache.  This call is for use by
-        * the KeystoneClient in case where a tenant is deleted.  In that case,
-        * all cached credentials must be purged so that fresh authentication is
-        * done on subsequent calls.
-        * <p>
-        * @param tenantName
-        * @param cloudId
-        */
-       public void expireNeutronClient (String tenantId, String cloudId) {
-               String cacheKey = cloudId + ":" + tenantId;
-               if (neutronClientCache.containsKey(cacheKey)) {
-                       neutronClientCache.remove(cacheKey);
-                       LOGGER.debug ("Deleted Cached Neutron Client for " + cacheKey);
-               }
-       }
-
-
        /*
         * Find a tenant (or query its existence) by its Name or Id.  Check first against the
         * ID.  If that fails, then try by name.
index 9743153..dfe5912 100644 (file)
@@ -25,6 +25,8 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -174,11 +176,13 @@ public class HeatStackAudit {
                return vserversToAudit;
        }
 
-       protected Optional<String> extractResourcePathFromHref(String href) {
-               URI uri;
+       protected Optional<String> extractResourcePathFromHref(String href) {           
                try {
-                       uri = new URI(href);                    
-                       return Optional.of(uri.getPath().replaceFirst("/v\\d+", "")+RESOURCES);                 
+                       Optional<String> stackPath = extractStackPathFromHref(href);
+                       if (stackPath.isPresent()){                                             
+                               return Optional.of(stackPath.get()+RESOURCES);
+                       }else
+                               return Optional.empty();
                } catch (Exception e) {
                        logger.error("Error parsing URI", e);
                }
@@ -186,10 +190,14 @@ public class HeatStackAudit {
        }
        
        protected Optional<String> extractStackPathFromHref(String href) {
-               URI uri;
                try {
-                       uri = new URI(href);                    
-                       return Optional.of(uri.getPath().replaceFirst("/v\\d+", ""));                   
+                       URI uri = new URI(href);        
+                       Pattern p = Pattern.compile("/stacks.*");
+                       Matcher m = p.matcher(uri.getPath());
+                       if (m.find()){                                          
+                               return Optional.of(m.group());
+                       }else
+                               return Optional.empty();
                } catch (Exception e) {
                        logger.error("Error parsing URI", e);
                }
index c5b93a7..b3cdd46 100644 (file)
@@ -80,19 +80,19 @@ public class HeatStackAuditTest extends HeatStackAudit {
        
        @Test
        public void extract_proper_path_Test(){
-               Optional<String> actualResult = extractStackPathFromHref("https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81");
-               assertEquals("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81", actualResult.get());
+               Optional<String> actualResult = extractStackPathFromHref("https://orchestration.com:8004/v1/stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81");
+               assertEquals("/stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81", actualResult.get());
        }
        
        @Test
        public void extract_proper_resources_path_Test(){
-               Optional<String> actualResult = extractResourcePathFromHref("https://orchestration.com:8004/v1/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81");
-               assertEquals("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81/resources", actualResult.get());
+               Optional<String> actualResult = extractResourcePathFromHref("https://orchestration.com:8004/v1/stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81");
+               assertEquals("/stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81/resources", actualResult.get());
        }
        
        @Test
        public void extract_invalid_uri_Test(){
-               Optional<String> actualResult = extractStackPathFromHref("orchestrn.com:8004/v18b44d60a6f94bdcb2738f9e/stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81");
+               Optional<String> actualResult = extractStackPathFromHref("orchestrn.com:8004/v18b44d60a6f94bdcb2738f9e//stacks/test_stack/f711be16-2654-4a09-b89d-0511fda20e81");
                assertEquals(false, actualResult.isPresent());
        }
 
@@ -114,6 +114,8 @@ public class HeatStackAuditTest extends HeatStackAudit {
                ssc_1_trusted_port_0.setInterfaceId("d2f51f82-0ec2-4581-bd1a-d2a82073e52b");
                vServer1.getLInterfaces().getLInterface().add(ssc_1_trusted_port_0);
                
+
+               
                LInterface ssc_1_mgmt_port_1 = new LInterface();
                ssc_1_mgmt_port_1.setInterfaceId("07f5b14c-147a-4d14-8c94-a9e94dbc097b");
                vServer1.getLInterfaces().getLInterface().add(ssc_1_mgmt_port_1);
@@ -156,33 +158,34 @@ public class HeatStackAuditTest extends HeatStackAudit {
                
                expectedVservers.add(vServer1);
                
+               
                Resources service1QueryResponse = objectMapper.readValue(new File("src/test/resources/Service1ResourceGroupResponse.json"), Resources.class);
-               doReturn(service1QueryResponse).when(msoHeatUtilsMock).executeHeatClientRequest("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz/31d0647a-6043-49a4-81b6-ccab29380672/resources", cloudRegion,     tenantId, Resources.class);
+               doReturn(service1QueryResponse).when(msoHeatUtilsMock).executeHeatClientRequest("/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz/31d0647a-6043-49a4-81b6-ccab29380672/resources", cloudRegion,      tenantId, Resources.class);
                
                Resources service2QueryResponse =objectMapper.readValue(new File("src/test/resources/Service2ResourceGroupResponse.json"), Resources.class);
-               doReturn(service2QueryResponse).when(msoHeatUtilsMock).executeHeatClientRequest("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst/447a9b41-714e-434b-b1d0-6cce8d9f0f0c/resources", cloudRegion,     tenantId, Resources.class);
+               doReturn(service2QueryResponse).when(msoHeatUtilsMock).executeHeatClientRequest("/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst/447a9b41-714e-434b-b1d0-6cce8d9f0f0c/resources", cloudRegion,      tenantId, Resources.class);
                
                
                Stack service2StackQuerySubInt = stackObjectMapper.readValue(new File("src/test/resources/Service2SubInterface0.json"), Stack.class);
-               doReturn(service2StackQuerySubInt).when(msoHeatUtilsMock).executeHeatClientRequest("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", cloudRegion,tenantId, Stack.class);
+               doReturn(service2StackQuerySubInt).when(msoHeatUtilsMock).executeHeatClientRequest("/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81", cloudRegion,tenantId, Stack.class);
                Resources service2ResourceQuerySubInt = objectMapper.readValue(new File("src/test/resources/Service2SubInterface1Resources.json"), Resources.class);
-               doReturn(service2ResourceQuerySubInt).when(msoHeatUtilsMock).executeHeatClientRequest("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources", cloudRegion,tenantId, Resources.class);
+               doReturn(service2ResourceQuerySubInt).when(msoHeatUtilsMock).executeHeatClientRequest("/stacks/tsbc0005vm002ssc001-ssc_1_subint_service2_port_0_subinterfaces-hlzdigtimzst-0-upfi5nhurk7y/f711be16-2654-4a09-b89d-0511fda20e81/resources", cloudRegion,tenantId, Resources.class);
                
                Stack service1StackQuerySubInt1 =stackObjectMapper.readValue(new File("src/test/resources/Service1SubInterface0.json"), Stack.class);
-               doReturn(service1StackQuerySubInt1).when(msoHeatUtilsMock).executeHeatClientRequest("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-1-fmn5laetg5cs/0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", cloudRegion,tenantId, Stack.class);
+               doReturn(service1StackQuerySubInt1).when(msoHeatUtilsMock).executeHeatClientRequest("/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-1-fmn5laetg5cs/0d9cd813-2ae1-46c0-9ebb-48081f6cffbb", cloudRegion,tenantId, Stack.class);
                Resources service1ResourceQuerySubInt1 = objectMapper.readValue(new File("src/test/resources/Service1SubInterface0Resources.json"), Resources.class);
-               doReturn(service1ResourceQuerySubInt1).when(msoHeatUtilsMock).executeHeatClientRequest("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-1-fmn5laetg5cs/0d9cd813-2ae1-46c0-9ebb-48081f6cffbb/resources", cloudRegion,tenantId, Resources.class);
+               doReturn(service1ResourceQuerySubInt1).when(msoHeatUtilsMock).executeHeatClientRequest("/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-1-fmn5laetg5cs/0d9cd813-2ae1-46c0-9ebb-48081f6cffbb/resources", cloudRegion,tenantId, Resources.class);
 
        
                Stack service1StackQuerySubInt2 =stackObjectMapper.readValue(new File("src/test/resources/Service1SubInterface1.json"), Stack.class);
-               doReturn(service1StackQuerySubInt2).when(msoHeatUtilsMock).executeHeatClientRequest("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-0-yghihziaf36m/b7019dd0-2ee9-4447-bdef-ac25676b205a", cloudRegion,tenantId, Stack.class);
+               doReturn(service1StackQuerySubInt2).when(msoHeatUtilsMock).executeHeatClientRequest("/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-0-yghihziaf36m/b7019dd0-2ee9-4447-bdef-ac25676b205a", cloudRegion,tenantId, Stack.class);
                Resources service1ResourceQuerySubInt2 = objectMapper.readValue(new File("src/test/resources/Service1SubInterface1Resources.json"), Resources.class);
-               doReturn(service1ResourceQuerySubInt2).when(msoHeatUtilsMock).executeHeatClientRequest("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-0-yghihziaf36m/b7019dd0-2ee9-4447-bdef-ac25676b205a/resources", cloudRegion,tenantId, Resources.class);
+               doReturn(service1ResourceQuerySubInt2).when(msoHeatUtilsMock).executeHeatClientRequest("/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-0-yghihziaf36m/b7019dd0-2ee9-4447-bdef-ac25676b205a/resources", cloudRegion,tenantId, Resources.class);
 
                Stack service1StackQuerySubInt3 =stackObjectMapper.readValue(new File("src/test/resources/Service1SubInterface2.json"), Stack.class);
-               doReturn(service1StackQuerySubInt3).when(msoHeatUtilsMock).executeHeatClientRequest("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-2-y3ndsavmsymv/bd0fc728-cbde-4301-a581-db56f494675c", cloudRegion,tenantId, Stack.class);
+               doReturn(service1StackQuerySubInt3).when(msoHeatUtilsMock).executeHeatClientRequest("/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-2-y3ndsavmsymv/bd0fc728-cbde-4301-a581-db56f494675c", cloudRegion,tenantId, Stack.class);
                Resources service1ResourceQuerySubInt3 = objectMapper.readValue(new File("src/test/resources/Service1SubInterface2Resources.json"), Resources.class);
-               doReturn(service1ResourceQuerySubInt3).when(msoHeatUtilsMock).executeHeatClientRequest("/ea2d13cc98b44d60a6f94bdcb2738f9e/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-2-y3ndsavmsymv/bd0fc728-cbde-4301-a581-db56f494675c/resources", cloudRegion,tenantId, Resources.class);
+               doReturn(service1ResourceQuerySubInt3).when(msoHeatUtilsMock).executeHeatClientRequest("/stacks/tsbc0005vm002ssc001-ssc_1_subint_service1_port_0_subinterfaces-dtmxjmny7yjz-2-y3ndsavmsymv/bd0fc728-cbde-4301-a581-db56f494675c/resources", cloudRegion,tenantId, Resources.class);
        
                Set<Vserver> vServersToAudit = heatStackAudit.createVserverSet(resources, novaResources);
                Set<Vserver> vserversWithSubInterfaces = heatStackAudit.processSubInterfaces(cloudRegion,tenantId,resourceGroups, vServersToAudit);
index 025b533..750f255 100644 (file)
@@ -4,6 +4,8 @@
  * ================================================================================
  * Copyright (C) 2018 Huawei Intellectual Property. All rights reserved.
  * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
  * 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
@@ -154,7 +156,7 @@ public class ResourceRequestBuilder {
                 }
             }
 
-           if (resourceInputStr != null || !resourceInputStr.equals("")) {
+           if (resourceInputStr != null && !resourceInputStr.isEmpty()) {
                 return getResourceInput(resourceInputStr, serviceInputs);
            }
 
index 3828528..17b99e2 100644 (file)
@@ -38,22 +38,21 @@ public class GlobalDmaapPublisher extends DmaapPublisher {
        }
        
        @Override
-       public String getUserName() {
+       public String getAuth() {
 
-               return UrnPropertiesReader.getVariable("mso.global.dmaap.username");
+               return UrnPropertiesReader.getVariable("mso.global.dmaap.auth");
        }
 
 
 
        @Override
-       public String getPassword() {
+       public String getKey() {
 
-               return UrnPropertiesReader.getVariable("mso.global.dmaap.password");
+               return UrnPropertiesReader.getVariable("mso.msoKey");
        }
 
        @Override
        public String getTopic() {
-               
                return UrnPropertiesReader.getVariable("mso.global.dmaap.publisher.topic");
        }
 
index e5e1326..ddca319 100644 (file)
@@ -405,4 +405,32 @@ public class ResourceRequestBuilderTest extends BaseTest {
         assertEquals(resourceSequence.get(0), "res1");
         assertEquals(resourceSequence.get(1), "res2");
     }
-}
\ No newline at end of file
+
+    @Test
+    public void getResourceInputWithEmptyServiceResourcesTest() throws Exception {
+
+        stubFor(get(urlEqualTo("/ecomp/mso/catalog/v2/serviceResources?serviceModelUuid=c3954379-4efe-431c-8258-f84905b158e5"))
+            .willReturn(ok("{ \"serviceResources\"    : {\n" +
+                "\t\"modelInfo\"       : {\n" +
+                "\t\t\"modelName\"          : \"demoVFWCL\",\n" +
+                "\t\t\"modelUuid\"          : \"c3954379-4efe-431c-8258-f84905b158e5\",\n" +
+                "\t\t\"modelInvariantUuid\" : \"0cbff61e-3b0a-4eed-97ce-b1b4faa03493\",\n" +
+                "\t\t\"modelVersion\"       : \"1.0\"\n" +
+                "\t},\n" +
+                "\t\"serviceType\"        : \"\",\n" +
+                "\t\"serviceRole\"        : \"\",\n" +
+                "\t\"environmentContext\" : null,\n" +
+                "\t\"workloadContext\"    : \"Production\",\n" +
+                "\t\"serviceVnfs\": [], \n" +
+                "\t\"serviceNetworks\": [],\n" +
+                "\t\"serviceAllottedResources\": []\n" +
+                "\t}}")));
+
+        HashMap serviceInput = new HashMap();
+        serviceInput.put("key1", "value");
+        Map<String, Object> stringObjectMap = ResourceRequestBuilder.buildResouceRequest("c3954379-4efe-431c-8258-f84905b158e5",
+            "e776449e-2b10-45c5-9217-2775c88ca1a0", serviceInput);
+        assertEquals(0, stringObjectMap.size());
+    }
+
+}
index 4d7c85e..fc69f81 100644 (file)
@@ -35,8 +35,8 @@ public class GlobalDmaapPublisherTest extends BaseTest{
 
        @Test
        public void testGetters() {
-               assertEquals("dmaapUsername", globalDmaapPublisher.getUserName());
-               assertEquals("ZG1hYXBQYXNzd29yZA==", globalDmaapPublisher.getPassword());
+               assertEquals("81B7E3533B91A6706830611FB9A8ECE529BBCCE754B1F1520FA7C8698B42F97235BEFA993A387E664D6352C63A6185D68DA7F0B1D360637CBA102CB166E3E62C11EB1F75386D3506BCECE51E54", globalDmaapPublisher.getAuth());
+               assertEquals("07a7159d3bf51a0e53be7a8f89699be7", globalDmaapPublisher.getKey());
                assertEquals("com.att.mso.asyncStatusUpdate", globalDmaapPublisher.getTopic());
                assertEquals("http://localhost:" + wireMockPort, globalDmaapPublisher.getHost().get());
        }
index 945972c..afdb800 100644 (file)
@@ -146,6 +146,7 @@ mso:
       host: http://localhost:${wiremock.server.port}
       publisher:
         topic: com.att.mso.asyncStatusUpdate
+      auth: 81B7E3533B91A6706830611FB9A8ECE529BBCCE754B1F1520FA7C8698B42F97235BEFA993A387E664D6352C63A6185D68DA7F0B1D360637CBA102CB166E3E62C11EB1F75386D3506BCECE51E54
   oof:
     auth: test
     timeout: PT10S
@@ -163,6 +164,16 @@ sdnc:
   auth: Basic YWRtaW46YWRtaW4=
   host: http://localhost:8446
   path: /restconf/operations/GENERIC-RESOURCE-API
+sdno:
+  health-check:
+    dmaap:
+      password: alRyMzJ3NUNeakxl
+      publisher:
+        topic: com.att.sdno.test-health-diagnostic-v02
+        host: https://olsd004.wnsnet.attws.com:3905
+      subscriber:
+        topic: com.att.sdno.test-health-diagnostic-v02
+      auth: 81B7E3533B91A6706830611FB9A8ECE529BBCCE754B1F1520FA7C8698B42F97235BEFA993A387E664D6352C63A6185D68DA7F0B1D360637CBA102CB166E3E62C11EB1F75386D3506BCECE51E54
 sniro:
   conductor:
     enabled: true
@@ -178,7 +189,15 @@ sniro:
     headers.patchVersion: 1
     headers.minorVersion: 1
     headers.latestVersion: 2
-
+ruby:
+  create-ticket-request:
+    dmaap:
+      username: m04768@mso.ecomp.att.com
+      password: alRyMzJ3NUNeakxl
+    publisher:
+      topic: com.att.pdas.exp.msoCMFallout-v1
+      host: https://olsd004.wnsnet.attws.com:3905
+      auth: 81B7E3533B91A6706830611FB9A8ECE529BBCCE754B1F1520FA7C8698B42F97235BEFA993A387E664D6352C63A6185D68DA7F0B1D360637CBA102CB166E3E62C11EB1F75386D3506BCECE51E54
 spring:
   datasource:
     jdbc-url: jdbc:mariadb://localhost:3307/camundabpmn
index 70d9405..4e0bf02 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.pnf.delegate;
 
-import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
-
 import org.onap.aai.domain.yang.Pnf;
 import org.onap.so.bpmn.infrastructure.pnf.implementation.AaiConnection;
 import org.springframework.context.annotation.Primary;
@@ -39,9 +37,10 @@ public class AaiConnectionTestImpl implements AaiConnection {
     public static final String ID_WITH_ENTRY = "idWithEntryNoIp";
 
     private Map<String, Pnf> created = new HashMap<>();
+    private Map<String, String> serviceAndPnfRelationMap = new HashMap<>();
 
     @Override
-    public Optional<Pnf> getEntryFor(String correlationId) throws IOException {
+    public Optional<Pnf> getEntryFor(String correlationId) {
         if (Objects.equals(correlationId, ID_WITH_ENTRY)) {
             return Optional.of(new Pnf());
         } else {
@@ -50,15 +49,25 @@ public class AaiConnectionTestImpl implements AaiConnection {
     }
 
     @Override
-    public void createEntry(String correlationId, Pnf entry) throws IOException {
+    public void createEntry(String correlationId, Pnf entry) {
         created.put(correlationId, entry);
     }
 
+    @Override
+    public void createRelation(String serviceInstanceId, String pnfName) {
+        serviceAndPnfRelationMap.put(serviceInstanceId, pnfName);
+    }
+
     public Map<String, Pnf> getCreated() {
         return created;
     }
 
+    public Map<String, String> getServiceAndPnfRelationMap() {
+        return serviceAndPnfRelationMap;
+    }
+
     public void reset() {
         created.clear();
+        serviceAndPnfRelationMap.clear();
     }
 }
index 2d0d4b5..db6cbe0 100644 (file)
@@ -31,15 +31,19 @@ import java.util.Map;
 
 import java.util.UUID;
 import org.assertj.core.api.Assertions;
+import org.assertj.core.data.MapEntry;
 import org.camunda.bpm.engine.runtime.ProcessInstance;
+import org.junit.Before;
 import org.junit.Test;
 import org.onap.so.BaseIntegrationTest;
 import org.springframework.beans.factory.annotation.Autowired;
 
 public class CreateAndActivatePnfResourceTest extends BaseIntegrationTest {
 
-    private static final String TIMEOUT_10_S = "PT10S";
     private static final String VALID_UUID = UUID.nameUUIDFromBytes("testUuid".getBytes()).toString();
+    private static final String SERVICE_INSTANCE_ID = "serviceForInstance";
+
+    private Map<String, Object> variables;
 
     @Autowired
     private AaiConnectionTestImpl aaiConnection;
@@ -47,14 +51,18 @@ public class CreateAndActivatePnfResourceTest extends BaseIntegrationTest {
     @Autowired
     private DmaapClientTestImpl dmaapClientTestImpl;
 
+    @Before
+    public void setup() {
+        aaiConnection.reset();
+        variables = new HashMap<>();
+        variables.put("serviceInstanceId", SERVICE_INSTANCE_ID);
+        variables.put(PNF_UUID, VALID_UUID);
+    }
+
     @Test
     public void shouldWaitForMessageFromDmaapAndUpdateAaiEntryWhenAaiEntryExists() {
         // given
-        aaiConnection.reset();       
-        Map<String, Object> variables = new HashMap<>();
-        variables.put("timeoutForPnfEntryNotification", TIMEOUT_10_S);
         variables.put(CORRELATION_ID, AaiConnectionTestImpl.ID_WITH_ENTRY);
-        variables.put(PNF_UUID, VALID_UUID);
         // when
         ProcessInstance instance = runtimeService
                 .startProcessInstanceByKey("CreateAndActivatePnfResource", "businessKey", variables);
@@ -70,19 +78,17 @@ public class CreateAndActivatePnfResourceTest extends BaseIntegrationTest {
                 "AaiEntryExists",
                 "InformDmaapClient",
                 "WaitForDmaapPnfReadyNotification",
+                "CreateRelationId",
                 "AaiEntryUpdated"
         );
+        Assertions.assertThat(aaiConnection.getServiceAndPnfRelationMap()).
+                containsOnly(MapEntry.entry(SERVICE_INSTANCE_ID,AaiConnectionTestImpl.ID_WITH_ENTRY));
     }
 
     @Test
     public void shouldCreateAaiEntryWaitForMessageFromDmaapAndUpdateAaiEntryWhenNoAaiEntryExists() {
         // given
-        aaiConnection.reset();
-       
-        Map<String, Object> variables = new HashMap<>();
-        variables.put("timeoutForPnfEntryNotification", TIMEOUT_10_S);
         variables.put(CORRELATION_ID, AaiConnectionTestImpl.ID_WITHOUT_ENTRY);
-        variables.put(PNF_UUID, VALID_UUID);
         // when
         ProcessInstance instance = runtimeService
                 .startProcessInstanceByKey("CreateAndActivatePnfResource", "businessKey", variables);
@@ -99,8 +105,11 @@ public class CreateAndActivatePnfResourceTest extends BaseIntegrationTest {
                 "AaiEntryExists",
                 "InformDmaapClient",
                 "WaitForDmaapPnfReadyNotification",
+                "CreateRelationId",
                 "AaiEntryUpdated"
         );
         Assertions.assertThat(aaiConnection.getCreated()).containsOnlyKeys(AaiConnectionTestImpl.ID_WITHOUT_ENTRY);
+        Assertions.assertThat(aaiConnection.getServiceAndPnfRelationMap()).
+                containsOnly(MapEntry.entry(SERVICE_INSTANCE_ID,AaiConnectionTestImpl.ID_WITHOUT_ENTRY));
     }
 }
index d57e487..1bf2a29 100644 (file)
@@ -23,7 +23,11 @@ package org.onap.so.bpmn.infrastructure.pnf.aai;
 import java.util.Optional;
 import org.onap.aai.domain.yang.Pnf;
 import org.onap.so.bpmn.infrastructure.pnf.implementation.AaiConnection;
+import org.onap.so.client.aai.AAIObjectType;
+import org.onap.so.client.aai.AAIResourcesClient;
 import org.onap.so.client.aai.AAIRestClientImpl;
+import org.onap.so.client.aai.entities.uri.AAIResourceUri;
+import org.onap.so.client.aai.entities.uri.AAIUriFactory;
 import org.springframework.stereotype.Component;
 
 @Component
@@ -40,4 +44,12 @@ public class AaiConnectionImpl implements AaiConnection {
         AAIRestClientImpl restClient = new AAIRestClientImpl();
         restClient.createPnf(correlationId, entry);
     }
+
+    @Override
+    public void createRelation(String serviceInstanceId, String pnfName) {
+        AAIResourceUri serviceInstanceURI = AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE,
+                serviceInstanceId);
+        AAIResourceUri pnfUri = AAIUriFactory.createResourceUri(AAIObjectType.PNF, pnfName);
+        new AAIResourcesClient().connect(serviceInstanceURI, pnfUri);
+    }
 }
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/pnf/delegate/CreateRelation.java b/bpmn/so-bpmn-infrastructure-common/src/main/java/org/onap/so/bpmn/infrastructure/pnf/delegate/CreateRelation.java
new file mode 100644 (file)
index 0000000..21d4396
--- /dev/null
@@ -0,0 +1,58 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2019 Nokia.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.pnf.delegate;
+
+import org.camunda.bpm.engine.delegate.DelegateExecution;
+import org.camunda.bpm.engine.delegate.JavaDelegate;
+import org.onap.so.bpmn.common.scripts.ExceptionUtil;
+import org.onap.so.bpmn.infrastructure.pnf.implementation.AaiConnection;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class CreateRelation implements JavaDelegate {
+
+    private static final Logger logger = LoggerFactory.getLogger(CreateRelation.class);
+
+    private AaiConnection aaiConnectionImpl;
+
+    @Autowired
+    public CreateRelation(AaiConnection aaiConnectionImpl) {
+        this.aaiConnectionImpl = aaiConnectionImpl;
+    }
+
+    @Override
+    public void execute(DelegateExecution delegateExecution) {
+        String serviceInstanceId = (String) delegateExecution.getVariable("serviceInstanceId");
+        String pnfName = (String) delegateExecution.getVariable("correlationId");
+        try {
+            aaiConnectionImpl.createRelation(serviceInstanceId, pnfName);
+        } catch (Exception e) {
+            new ExceptionUtil().buildAndThrowWorkflowException(delegateExecution, 9999,
+                    "An exception occurred when making service and pnf relation. Exception: " + e.getMessage());
+        }
+        logger.debug("The relation has been made between service with id: {} and pnf with name: {}",
+                serviceInstanceId, pnfName);
+    }
+
+}
index 5165912..eaabb2b 100644 (file)
@@ -29,4 +29,6 @@ public interface AaiConnection {
     Optional<Pnf> getEntryFor(String correlationId) throws IOException;
 
     void createEntry(String correlationId, Pnf entry) throws IOException;
+
+    void createRelation(String serviceInstanceId, String pnfName) throws IOException;
 }
index 201e791..76b62a9 100644 (file)
@@ -37,7 +37,7 @@ public class AaiConnectionTestImpl implements AaiConnection {
     private Map<String, Pnf> created = new HashMap<>();
 
     @Override
-    public Optional<Pnf> getEntryFor(String correlationId) throws IOException {
+    public Optional<Pnf> getEntryFor(String correlationId) {
         if (Objects.equals(correlationId, ID_WITH_ENTRY)) {
             return Optional.of(new Pnf());
         } else {
@@ -50,6 +50,10 @@ public class AaiConnectionTestImpl implements AaiConnection {
         created.put(correlationId, entry);
     }
 
+    @Override
+    public void createRelation(String serviceInstanceId, String pnfName) {
+    }
+
     public Map<String, Pnf> getCreated() {
         return created;
     }
index 7df6757..300d1e4 100644 (file)
@@ -36,4 +36,10 @@ public class AaiConnectionThrowingException implements AaiConnection {
     public void createEntry(String correlationId, Pnf entry) throws IOException {
         throw new IOException();
     }
+
+    @Override
+    public void createRelation(String serviceInstanceId, String pnfName) throws IOException {
+        throw new IOException();
+    }
+
 }
diff --git a/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/CreateRelationTest.java b/bpmn/so-bpmn-infrastructure-common/src/test/java/org/onap/so/bpmn/infrastructure/pnf/delegate/CreateRelationTest.java
new file mode 100644 (file)
index 0000000..2dd3e23
--- /dev/null
@@ -0,0 +1,67 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2019 Nokia.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.bpmn.infrastructure.pnf.delegate;
+
+import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
+import java.io.IOException;
+import org.camunda.bpm.engine.delegate.BpmnError;
+import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.so.bpmn.infrastructure.pnf.aai.AaiConnectionImpl;
+import org.onap.so.bpmn.infrastructure.pnf.implementation.AaiConnection;
+
+public class CreateRelationTest {
+
+    private static final String SERVICE_INSTANCE_ID = "serviceTest";
+    private static final String PNF_NAME = "pnfNameTest";
+
+    private DelegateExecutionFake executionFake;
+
+    @Before
+    public void setUp() {
+        executionFake = new DelegateExecutionFake();
+        executionFake.setVariable("serviceInstanceId", SERVICE_INSTANCE_ID);
+        executionFake.setVariable("correlationId", PNF_NAME);
+    }
+
+    @Test
+    public void createRelationSuccessful() throws IOException {
+        // given
+        AaiConnection aaiConnectionMock = mock(AaiConnectionImpl.class);
+        CreateRelation testedObject = new CreateRelation(aaiConnectionMock);
+        // when
+        testedObject.execute(executionFake);
+        // then
+        verify(aaiConnectionMock).createRelation(SERVICE_INSTANCE_ID, PNF_NAME);
+    }
+
+    @Test
+    public void shouldThrowBpmnErrorWhenExceptionOccurred() {
+        CreateRelation testedObject = new CreateRelation(new AaiConnectionThrowingException());
+        executionFake.setVariable("testProcessKey", "testProcessKeyValue");
+
+        assertThatThrownBy(() -> testedObject.execute(executionFake)).isInstanceOf(BpmnError.class);
+    }
+}
index d807917..5defe21 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="2.0.3">
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.11.3">
   <bpmn:collaboration id="Collaboration_1d0w8lf">
     <bpmn:participant id="Participant_1egg397" name="SO&#10;Create and Activate Pnf Resource" processRef="CreateAndActivatePnfResource" />
     <bpmn:participant id="Participant_0atuyq0" name="AAI" />
@@ -17,7 +17,7 @@
     <bpmn:sequenceFlow id="SequenceFlow_0v5ffpe" name="No" sourceRef="DoesAaiContainInfoAboutPnf" targetRef="CreatePnfEntryInAai">
       <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{!aaiContainsInfoAboutPnf}</bpmn:conditionExpression>
     </bpmn:sequenceFlow>
-    <bpmn:sequenceFlow id="SequenceFlow_0p09qgm" sourceRef="WaitForDmaapPnfReadyNotification" targetRef="AaiEntryUpdated" />
+    <bpmn:sequenceFlow id="SequenceFlow_0p09qgm" sourceRef="WaitForDmaapPnfReadyNotification" targetRef="CreateRelationId" />
     <bpmn:sequenceFlow id="SequenceFlow_17s9025" sourceRef="AaiEntryExists" targetRef="InformDmaapClient" />
     <bpmn:sequenceFlow id="SequenceFlow_1qr6cmf" sourceRef="CreatePnfEntryInAai" targetRef="AaiEntryExists" />
     <bpmn:sequenceFlow id="SequenceFlow_1j4r3zt" sourceRef="CheckAiiForCorrelationId" targetRef="DoesAaiContainInfoAboutPnf" />
@@ -59,9 +59,6 @@
       <bpmn:incoming>SequenceFlow_1miyzfe</bpmn:incoming>
       <bpmn:errorEventDefinition errorRef="Error_1" />
     </bpmn:endEvent>
-    <bpmn:endEvent id="AaiEntryUpdated" name="AAI entry updated">
-      <bpmn:incoming>SequenceFlow_0p09qgm</bpmn:incoming>
-    </bpmn:endEvent>
     <bpmn:receiveTask id="WaitForDmaapPnfReadyNotification" name="Wait for DMAAP pnf-ready notification" messageRef="Message_13h1tlo">
       <bpmn:incoming>SequenceFlow_1o8od8e</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0p09qgm</bpmn:outgoing>
       <bpmn:incoming>SequenceFlow_1qr6cmf</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_17s9025</bpmn:outgoing>
     </bpmn:exclusiveGateway>
+    <bpmn:sequenceFlow id="SequenceFlow_0o6zhjk" sourceRef="CreateRelationId" targetRef="AaiEntryUpdated" />
+    <bpmn:endEvent id="AaiEntryUpdated" name="AAI entry updated">
+      <bpmn:incoming>SequenceFlow_0o6zhjk</bpmn:incoming>
+    </bpmn:endEvent>
+    <bpmn:serviceTask id="CreateRelationId" name="Create Relation" camunda:delegateExpression="${CreateRelation}">
+      <bpmn:incoming>SequenceFlow_0p09qgm</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0o6zhjk</bpmn:outgoing>
+    </bpmn:serviceTask>
     <bpmn:association id="Association_0d7oxnz" sourceRef="CreateAndActivatePnf_StartEvent" targetRef="TextAnnotation_1eyzes8" />
     <bpmn:textAnnotation id="TextAnnotation_1eyzes8">
-      <bpmn:text>Inputs:
+      <bpmn:text><![CDATA[Inputs:
 Â - timeoutForPnfEntryNotification - String
  - correlationId - String
- - uuid - String
-</bpmn:text>
+ - uuid - String]]></bpmn:text>
     </bpmn:textAnnotation>
   </bpmn:process>
   <bpmn:error id="Error_1" name="MSO Workflow Exception" errorCode="MSOWorkflowException" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="EndEvent_0k52gr7_di" bpmnElement="AaiEntryUpdated">
-        <dc:Bounds x="1312" y="189" width="36" height="36" />
+        <dc:Bounds x="1364" y="189" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1287" y="230" width="88" height="14" />
+          <dc:Bounds x="1339" y="230" width="89" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="StartEvent_0j5ok9h_di" bpmnElement="CreateAndActivatePnf_StartEvent">
         <dc:Bounds x="511" y="167" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1j4r3zt_di" bpmnElement="SequenceFlow_1j4r3zt">
-        <di:waypoint x="319" y="207" />
-        <di:waypoint x="390" y="207" />
+        <di:waypoint xsi:type="dc:Point" x="319" y="207" />
+        <di:waypoint xsi:type="dc:Point" x="390" y="207" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="309.5" y="187" width="90" height="10" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1l1t6ak_di" bpmnElement="SequenceFlow_1l1t6ak">
-        <di:waypoint x="415" y="182" />
-        <di:waypoint x="415" y="66" />
-        <di:waypoint x="711" y="66" />
-        <di:waypoint x="711" y="182" />
+        <di:waypoint xsi:type="dc:Point" x="415" y="182" />
+        <di:waypoint xsi:type="dc:Point" x="415" y="66" />
+        <di:waypoint xsi:type="dc:Point" x="711" y="66" />
+        <di:waypoint xsi:type="dc:Point" x="711" y="182" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="430" y="159" width="19" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0v5ffpe_di" bpmnElement="SequenceFlow_0v5ffpe">
-        <di:waypoint x="440" y="207" />
-        <di:waypoint x="511" y="207" />
+        <di:waypoint xsi:type="dc:Point" x="440" y="207" />
+        <di:waypoint xsi:type="dc:Point" x="511" y="207" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="448" y="210" width="14" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1qr6cmf_di" bpmnElement="SequenceFlow_1qr6cmf">
-        <di:waypoint x="611" y="207" />
-        <di:waypoint x="686" y="207" />
+        <di:waypoint xsi:type="dc:Point" x="611" y="207" />
+        <di:waypoint xsi:type="dc:Point" x="686" y="207" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="605" y="187" width="90" height="10" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0j5ksz1_di" bpmnElement="SequenceFlow_0j5ksz1">
-        <di:waypoint x="-18" y="207" />
-        <di:waypoint x="48" y="207" />
+        <di:waypoint xsi:type="dc:Point" x="-18" y="207" />
+        <di:waypoint xsi:type="dc:Point" x="48" y="207" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="-30" y="187" width="90" height="10" />
         </bpmndi:BPMNLabel>
         <dc:Bounds x="123" y="523" width="502" height="60" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="MessageFlow_1h3xu88_di" bpmnElement="MessageFlow_1h3xu88">
-        <di:waypoint x="561" y="247" />
-        <di:waypoint x="561" y="523" />
+        <di:waypoint xsi:type="dc:Point" x="561" y="247" />
+        <di:waypoint xsi:type="dc:Point" x="561" y="523" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="531" y="380" width="90" height="10" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="MessageFlow_09ibv5a_di" bpmnElement="MessageFlow_09ibv5a">
-        <di:waypoint x="250" y="247" />
-        <di:waypoint x="250" y="523" />
+        <di:waypoint xsi:type="dc:Point" x="250" y="247" />
+        <di:waypoint xsi:type="dc:Point" x="250" y="523" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="220" y="380" width="90" height="10" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="MessageFlow_0vjul4t_di" bpmnElement="MessageFlow_0vjul4t">
-        <di:waypoint x="289" y="523" />
-        <di:waypoint x="289" y="247" />
+        <di:waypoint xsi:type="dc:Point" x="289" y="523" />
+        <di:waypoint xsi:type="dc:Point" x="289" y="247" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="259" y="380" width="90" height="10" />
         </bpmndi:BPMNLabel>
         <dc:Bounds x="-37" y="70" width="243" height="82" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="Association_0d7oxnz_di" bpmnElement="Association_0d7oxnz">
-        <di:waypoint x="-36" y="189" />
-        <di:waypoint x="-36" y="152" />
+        <di:waypoint xsi:type="dc:Point" x="-36" y="189" />
+        <di:waypoint xsi:type="dc:Point" x="-36" y="152" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="MessageFlow_1vrcp2d_di" bpmnElement="MessageFlow_1vrcp2d">
-        <di:waypoint x="1060" y="523" />
-        <di:waypoint x="1060" y="247" />
+        <di:waypoint xsi:type="dc:Point" x="1060" y="523" />
+        <di:waypoint xsi:type="dc:Point" x="1060" y="247" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="996" y="380" width="90" height="10" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_17s9025_di" bpmnElement="SequenceFlow_17s9025">
-        <di:waypoint x="736" y="207" />
-        <di:waypoint x="803" y="207" />
+        <di:waypoint xsi:type="dc:Point" x="736" y="207" />
+        <di:waypoint xsi:type="dc:Point" x="803" y="207" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="719" y="187" width="90" height="10" />
         </bpmndi:BPMNLabel>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1kc34bc_di" bpmnElement="SequenceFlow_1kc34bc">
-        <di:waypoint x="1092" y="265" />
-        <di:waypoint x="1092" y="363" />
-        <di:waypoint x="1145" y="363" />
+        <di:waypoint xsi:type="dc:Point" x="1092" y="265" />
+        <di:waypoint xsi:type="dc:Point" x="1092" y="363" />
+        <di:waypoint xsi:type="dc:Point" x="1145" y="363" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1028" y="309" width="90" height="10" />
         </bpmndi:BPMNLabel>
         <dc:Bounds x="1008" y="167" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0p09qgm_di" bpmnElement="SequenceFlow_0p09qgm">
-        <di:waypoint x="1108" y="207" />
-        <di:waypoint x="1312" y="207" />
+        <di:waypoint xsi:type="dc:Point" x="1108" y="207" />
+        <di:waypoint xsi:type="dc:Point" x="1195" y="207" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1148" y="187" width="90" height="10" />
+          <dc:Bounds x="1106.5" y="187" width="90" height="10" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1o8od8e_di" bpmnElement="SequenceFlow_1o8od8e">
-        <di:waypoint x="903" y="207" />
-        <di:waypoint x="1008" y="207" />
+        <di:waypoint xsi:type="dc:Point" x="903" y="207" />
+        <di:waypoint xsi:type="dc:Point" x="1008" y="207" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="893.5" y="187" width="90" height="10" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="MessageFlow_0tg4hw9_di" bpmnElement="MessageFlow_0tg4hw9">
-        <di:waypoint x="853" y="247" />
-        <di:waypoint x="853" y="523" />
+        <di:waypoint xsi:type="dc:Point" x="853" y="247" />
+        <di:waypoint xsi:type="dc:Point" x="853" y="523" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="823" y="380" width="90" height="10" />
         </bpmndi:BPMNLabel>
         <dc:Bounds x="803" y="167" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1miyzfe_di" bpmnElement="SequenceFlow_1miyzfe">
-        <di:waypoint x="1245" y="363" />
-        <di:waypoint x="1312" y="363" />
+        <di:waypoint xsi:type="dc:Point" x="1245" y="363" />
+        <di:waypoint xsi:type="dc:Point" x="1312" y="363" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1233.5" y="343" width="90" height="10" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="MessageFlow_1py54jr_di" bpmnElement="MessageFlow_1py54jr">
-        <di:waypoint x="1195" y="403" />
-        <di:waypoint x="1195" y="523" />
+        <di:waypoint xsi:type="dc:Point" x="1195" y="403" />
+        <di:waypoint xsi:type="dc:Point" x="1195" y="523" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1165" y="458" width="90" height="10" />
         </bpmndi:BPMNLabel>
         <dc:Bounds x="1145" y="323" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0967g8p_di" bpmnElement="SequenceFlow_0967g8p">
-        <di:waypoint x="148" y="207" />
-        <di:waypoint x="219" y="207" />
+        <di:waypoint xsi:type="dc:Point" x="148" y="207" />
+        <di:waypoint xsi:type="dc:Point" x="219" y="207" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="183.5" y="187" width="0" height="10" />
         </bpmndi:BPMNLabel>
           <dc:Bounds x="672" y="242" width="77" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0o6zhjk_di" bpmnElement="SequenceFlow_0o6zhjk">
+        <di:waypoint xsi:type="dc:Point" x="1295" y="207" />
+        <di:waypoint xsi:type="dc:Point" x="1364" y="207" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1329.5" y="186" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_0xn3ug6_di" bpmnElement="CreateRelationId">
+        <dc:Bounds x="1195" y="167" width="100" height="80" />
+      </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn:definitions>
index dde0b31..dea00dd 100644 (file)
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
+
 package org.onap.so.client.dmaap;
 
 import java.io.IOException;
+import java.security.GeneralSecurityException;
 import java.util.Base64;
 import java.util.Map;
 import java.util.Optional;
@@ -31,13 +32,14 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.core.io.Resource;
-
+import org.onap.so.utils.CryptoUtils;
 
 public abstract class DmaapClient {
-       
+
        protected static Logger logger = LoggerFactory.getLogger(DmaapClient.class);
        protected final Map<String, String> msoProperties;
        protected final Properties properties;
+
        public DmaapClient(String filepath) throws IOException {
                Resource resource = new ClassPathResource(filepath);
                DmaapProperties dmaapProperties = DmaapPropertiesLoader.getInstance().getNewImpl();
@@ -48,27 +50,34 @@ public abstract class DmaapClient {
                this.msoProperties = dmaapProperties.getProperties();
                this.properties = new Properties();
                this.properties.load(resource.getInputStream());
-               this.properties.put("password", this.deobfuscatePassword(this.getPassword()));
-               this.properties.put("username", this.getUserName());
+               try {
+                       this.properties.put("auth", CryptoUtils.decrypt(this.getAuth(), this.getKey()).getBytes());
+               } catch (GeneralSecurityException e) {
+                       logger.error(e.getMessage(), e);
+               }
+               this.properties.put("key", this.getKey());
                this.properties.put("topic", this.getTopic());
                Optional<String> host = this.getHost();
                if (host.isPresent()) {
                        this.properties.put("host", host.get());
                }
        }
-       protected String deobfuscatePassword(String password) {
-               
+
+       protected String deobfuscatePassword(String decrypted_key) {
+
                try {
-                       return new String(Base64.getDecoder().decode(password.getBytes()));
-               } catch(IllegalArgumentException iae) {
-                       logger.error("llegal Arguments",iae);
-                       return password;
+                       return new String(Base64.getDecoder().decode(decrypted_key.getBytes()));
+               } catch (IllegalArgumentException iae) {
+                       logger.error("llegal Arguments", iae);
+                       return decrypted_key;
                }
        }
-       
-       
-       public abstract String getUserName();
-       public abstract String getPassword();
+
+       public abstract String getKey();
+
+       public abstract String getAuth();
+
        public abstract String getTopic();
+
        public abstract Optional<String> getHost();
 }
index 0438ff2..9fd8c05 100644 (file)
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
+
 package org.onap.so.client.dmaap.rest;
 
 import java.net.URL;
-import java.util.Base64;
 import java.util.Map;
 
 import org.onap.so.client.RestClient;
+import org.onap.so.utils.CryptoUtils;
 import org.onap.so.utils.TargetEntity;
 
 public class DMaaPRestClient extends RestClient {
 
-       private final String username;
-       private final String password;
-       public DMaaPRestClient(URL url, String contentType, String username, String password) {
+       private final String auth;
+       private final String key;
+
+       public DMaaPRestClient(URL url, String contentType, String auth, String key) {
                super(url, contentType);
-               this.username = username;
-               this.password = password;
+               this.auth = auth;
+               this.key = key;
        }
 
-    @Override
-    public TargetEntity getTargetEntity(){
-        return TargetEntity.DMAAP;
-    }
+       @Override
+       public TargetEntity getTargetEntity() {
+               return TargetEntity.DMAAP;
+       }
 
        @Override
        protected void initializeHeaderMap(Map<String, String> headerMap) {
-               headerMap.put("Authorization", "Basic " + Base64.getEncoder().encodeToString((username + ":" + password).getBytes()));
+               if (auth != null && !auth.isEmpty() && key != null && !key.isEmpty()) {
+                       addBasicAuthHeader(auth, key);
+               }       
        }
 
 }
index f43c658..1884921 100644 (file)
@@ -24,8 +24,8 @@ import java.util.Properties;
 
 public class PropertiesBean {
 
-       private String username;
-       private String password;
+       private String auth;
+       private String key;
        private String environment;
        private String partition;
        private String contentType;
@@ -35,8 +35,8 @@ public class PropertiesBean {
        
        
        public PropertiesBean(Properties properties) {
-               this.withUsername(properties.getProperty("username"))
-               .withPassword(properties.getProperty("password"))
+               this.withAuth(properties.getProperty("auth"))
+               .withKey(properties.getProperty("key"))
                .withTopic(properties.getProperty("topic"))
                .withEnvironment(properties.getProperty("environment"))
                .withHost(properties.getProperty("host"))
@@ -44,24 +44,24 @@ public class PropertiesBean {
                .withPartition(properties.getProperty("partition"))
                .withContentType(properties.getProperty("contentType", "application/json"));
        }
-       public String getUsername() {
-               return username;
+       public String getAuth() {
+               return auth;
        }
-       public void setUsername(String username) {
-               this.username = username;
+       public void setAuth(String auth) {
+               this.auth = auth;
        }
-       public PropertiesBean withUsername(String username) {
-               this.username = username;
+       public PropertiesBean withAuth(String auth) {
+               this.auth = auth;
                return this;
        }
-       public String getPassword() {
-               return password;
+       public String getKey() {
+               return key;
        }
-       public void setPassword(String password) {
-               this.password = password;
+       public void setKey(String key) {
+               this.key = key;
        }
-       public PropertiesBean withPassword(String password) {
-               this.password = password;
+       public PropertiesBean withKey(String key) {
+               this.key = key;
                return this;
        }
        public String getEnvironment() {
index 39af156..bee5a0c 100644 (file)
@@ -37,7 +37,7 @@ public class RestConsumer implements Consumer {
        private final RestClient client;
        public RestConsumer(Properties properties) {
                PropertiesBean bean = new PropertiesBean(properties);
-               client = new DMaaPRestClient(this.createURL(bean), bean.getContentType(), bean.getUsername(), bean.getPassword());
+               client = new DMaaPRestClient(this.createURL(bean), bean.getContentType(), bean.getAuth(), bean.getKey());
        }
        
        private URL createURL(PropertiesBean properties) {
index 090e505..af660c2 100644 (file)
@@ -35,7 +35,7 @@ public class RestPublisher implements Publisher {
 
        public RestPublisher(Properties properties) {
                PropertiesBean bean = new PropertiesBean(properties);
-               client = new DMaaPRestClient(this.createURL(bean), bean.getContentType(), bean.getUsername(), bean.getPassword());
+               client = new DMaaPRestClient(this.createURL(bean), bean.getContentType(), bean.getAuth(), bean.getKey());
        }
        
        private URL createURL(PropertiesBean properties) {
index 1d4e014..93a2d96 100644 (file)
@@ -32,13 +32,13 @@ public class RubyCreateTicketRequestPublisher extends DmaapPublisher{
        }
        
        @Override
-       public String getUserName() {
-               return msoProperties.get("ruby.create-ticket-request.dmaap.username");
+       public String getAuth() {
+               return msoProperties.get("ruby.create-ticket-request.dmaap.auth");
        }
 
        @Override
-       public String getPassword() {
-               return msoProperties.get("ruby.create-ticket-request.dmaap.password");
+       public String getKey() {
+               return msoProperties.get("mso.msoKey");
        }
 
        @Override
index 8154b91..a76c47c 100644 (file)
@@ -42,13 +42,13 @@ public class SDNOHealthCheckDmaapConsumer extends DmaapConsumer {
        }
        
        @Override
-       public String getUserName() {
-               return msoProperties.get("sdno.health-check.dmaap.username");
+       public String getAuth() {
+               return msoProperties.get("sdno.health-check.dmaap.auth");
        }
 
        @Override
-       public String getPassword() {
-               return msoProperties.get("sdno.health-check.dmaap.password");
+       public String getKey() {
+               return msoProperties.get("mso.msoKey");
        }
 
        @Override
index 2556e67..f4af205 100644 (file)
@@ -33,13 +33,13 @@ public class SDNOHealthCheckDmaapPublisher extends DmaapPublisher {
        }
        
        @Override
-       public String getUserName() {
-               return msoProperties.get("sdno.health-check.dmaap.username");
+       public String getAuth() {
+               return msoProperties.get("sdno.health-check.dmaap.auth");
        }
 
        @Override
-       public String getPassword() {
-               return msoProperties.get("sdno.health-check.dmaap.password");
+       public String getKey() {
+               return msoProperties.get("sdno.health-check.dmaap.msoKey");
        }
 
        @Override
index c0633c1..0836ed2 100644 (file)
@@ -29,13 +29,13 @@ public class DmaapPublisherTest {
 
     DmaapPublisher dmaapPublisher = new DmaapPublisher(120) {
         @Override
-        public String getUserName() {
-            return "test";
+        public String getAuth() {
+            return "8F73A1691F6271E769329C176EE3EA48F52786AF12A3E16259007EED2A0F0CC3CB965F4AB5318483015723CCE1C0B48AB6C4DED6E251869393B01E4EC532FC88D4A128B92F4CDB34719B171923";
         }
 
         @Override
-        public String getPassword() {
-            return "test";
+        public String getKey() {
+            return "07a7159d3bf51a0e53be7a8f89699be7";
         }
 
         @Override
index 7ce1019..5593455 100644 (file)
@@ -4,4 +4,7 @@ sdno.health-check.dmaap.subscriber.topic=com.att.sdno.test-health-diagnostic-v02
 sdno.health-check.dmaap.publisher.topic=com.att.sdno.test-health-diagnostic-v02
 ruby.create-ticket-request.dmaap.username=testuser
 ruby.create-ticket-request.dmaap.password=eHQ1cUJrOUc
-ruby.create-ticket-request.publisher.topic=com.att.pdas.st1.msoCMFallout-v1
\ No newline at end of file
+ruby.create-ticket-request.publisher.topic=com.att.pdas.st1.msoCMFallout-v1
+ruby.create-ticket-request.dmaap.auth=81B7E3533B91A6706830611FB9A8ECE529BBCCE754B1F1520FA7C8698B42F97235BEFA993A387E664D6352C63A6185D68DA7F0B1D360637CBA102CB166E3E62C11EB1F75386D3506BCECE51E54
+sdno.health-check.dmaap.auth=81B7E3533B91A6706830611FB9A8ECE529BBCCE754B1F1520FA7C8698B42F97235BEFA993A387E664D6352C63A6185D68DA7F0B1D360637CBA102CB166E3E62C11EB1F75386D3506BCECE51E54
+mso.msoKey=07a7159d3bf51a0e53be7a8f89699be7
\ No newline at end of file
index 813299c..8409d9c 100644 (file)
@@ -31,8 +31,8 @@ public class DmaapPropertiesImpl implements DmaapProperties {
 
        private final Map<String, String> props  = new HashMap<>();
        private static final String[] propertyNames = {
-                       "mso.so.operational-environment.dmaap.username",
-                       "mso.so.operational-environment.dmaap.password",
+                       "mso.so.operational-environment.dmaap.auth",
+                       "mso.msoKey",
                        "mso.so.operational-environment.publisher.topic",
                        "mso.so.operational-environment.dmaap.host"
        };
index 52c395e..31bc6fc 100644 (file)
@@ -37,15 +37,15 @@ public class OperationalEnvironmentPublisher extends DmaapPublisher {
        }
        
        @Override
-       public String getUserName() {
+       public String getAuth() {
 
-               return this.msoProperties.get("mso.so.operational-environment.dmaap.username");
+               return this.msoProperties.get("mso.so.operational-environment.dmaap.auth");
        }
 
        @Override
-       public String getPassword() {
+       public String getKey() {
 
-               return this.msoProperties.get("mso.so.operational-environment.dmaap.password");
+               return this.msoProperties.get("mso.msoKey");
        }
 
        @Override
index 59df7ae..7329f31 100644 (file)
@@ -43,8 +43,8 @@ public class OperationalEnvironmentPublisherTest extends BaseTest {
        @Test
        public void getProperties() throws FileNotFoundException, IOException {
                
-               assertEquals("testuser", publisher.getUserName());
-               assertEquals("VjR5NDcxSzA=", publisher.getPassword());
+               assertEquals("B3705D6C2D521257CC2422ACCF03B001811ACC49F564DDB3A2CF2A1378B6D35A23CDCB696F2E1EDFBE6758DFE7C74B94F4A7DF84A0E2BB904935AC4D900D5597DF981ADE6CE1FF3AF993BED0", publisher.getAuth());
+               assertEquals("07a7159d3bf51a0e53be7a8f89699be7", publisher.getKey());
                assertEquals("test.operationalEnvironmentEvent", publisher.getTopic());
                assertEquals("http://localhost:" + env.getProperty("wiremock.server.port"), publisher.getHost().get());
        }
index 63eb053..4826c87 100644 (file)
@@ -1,10 +1,10 @@
 # will be used as entry in DB to say SITE OFF/ON for healthcheck
 
-server:
-    port: 8080
-    tomcat:
-        max-threads: 50
-ssl-enable: false
+server:  
+  port: 8080
+  tomcat:
+    max-threads: 50
+  
 
 mso:
   health:
@@ -77,6 +77,7 @@ mso:
         username: testuser
         password: VjR5NDcxSzA=
         host: http://localhost:${wiremock.server.port}
+        auth: B3705D6C2D521257CC2422ACCF03B001811ACC49F564DDB3A2CF2A1378B6D35A23CDCB696F2E1EDFBE6758DFE7C74B94F4A7DF84A0E2BB904935AC4D900D5597DF981ADE6CE1FF3AF993BED0
       publisher:
         topic: test.operationalEnvironmentEvent