From 5dc29aeb2500c1f0f344e8ab011925754a7c73a5 Mon Sep 17 00:00:00 2001 From: Dileep Ranganathan Date: Sat, 6 Oct 2018 16:35:11 -0700 Subject: [PATCH] OOF HAS CSIT with MUSIC v3 integration Updated HAS setup and teardown scripts Added MUSIC v3 support, AAF support, Basic Authorization for MUSIC. Used AAF_RootCA for A&AI simulator. Sync conductor.conf based on generated latest conf. Change-Id: Id1a6c8a4e524a6ade5b60277a6cb538724902d11 Issue-ID: OPTFRA-366 Signed-off-by: Dileep Ranganathan --- scripts/optf-has/has/has-properties/AAF_RootCA.cer | 31 ++ scripts/optf-has/has/has-properties/cert.cer | 36 --- scripts/optf-has/has/has-properties/cert.key | 28 -- scripts/optf-has/has/has-properties/cert.pem | 36 --- .../has/has-properties/conductor.conf.onap | 340 +++++++++++++++++---- scripts/optf-has/has/has_script.sh | 30 +- scripts/optf-has/has/music_script.sh | 100 ++++-- scripts/optf-has/has/music_teardown_script.sh | 38 ++- scripts/optf-has/has/simulator_script.sh | 25 +- scripts/optf-has/has/simulator_teardown_script.sh | 2 + tests/optf-has/has/optf_has_test.robot | 61 ++-- 11 files changed, 499 insertions(+), 228 deletions(-) create mode 100644 scripts/optf-has/has/has-properties/AAF_RootCA.cer delete mode 100644 scripts/optf-has/has/has-properties/cert.cer delete mode 100644 scripts/optf-has/has/has-properties/cert.key delete mode 100644 scripts/optf-has/has/has-properties/cert.pem diff --git a/scripts/optf-has/has/has-properties/AAF_RootCA.cer b/scripts/optf-has/has/has-properties/AAF_RootCA.cer new file mode 100644 index 00000000..e9a50d7e --- /dev/null +++ b/scripts/optf-has/has/has-properties/AAF_RootCA.cer @@ -0,0 +1,31 @@ +-----BEGIN CERTIFICATE----- +MIIFPjCCAyagAwIBAgIJAJ6u7cCnzrWdMA0GCSqGSIb3DQEBCwUAMCwxDjAMBgNV +BAsMBU9TQUFGMQ0wCwYDVQQKDARPTkFQMQswCQYDVQQGEwJVUzAeFw0xODA0MDUx +NDE1MjhaFw0zODAzMzExNDE1MjhaMCwxDjAMBgNVBAsMBU9TQUFGMQ0wCwYDVQQK +DARPTkFQMQswCQYDVQQGEwJVUzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBAMA5pkgRs7NhGG4ew5JouhyYakgYUyFaG121+/h8qbSdt0hVQv56+EA41Yq7 +XGie7RYDQK9NmAFF3gruE+6X7wvJiChp+Cyd7sFMnb65uWhxEdxWTM2BJFrgfzUn +H8ZCxgaCo3XH4PzlKRy2LQQJEJECwl/RZmRCXijMt5e9h8XoZY/fKkKcZZUsWNCM +pTo266wjvA9MXLmdgReRj0+vrCjrNqy+htwJDztoiHWiYPqT6o8EvGcgjNqjlZx7 +NUNf8MfLDByqKF6+wRbHv1GKjn3/Vijd45Fv8riyRYROiFanvbV6jIfBkv8PZbXg +2VDWsYsgp8NAvMxK+iV8cO+Ck3lBI2GOPZbCEqpPVTYbLUz6sczAlCXwQoPzDIZY +wYa3eR/gYLY1gP2iEVHORag3bLPap9ZX5E8DZkzTNTjovvLk8KaCmfcaUMJsBtDd +ApcUitz10cnRyZc1sX3gE1f3DpzQM6t9C5sOVyRhDcSrKqqwb9m0Ss04XAS9FsqM +P3UWYQyqDXSxlUAYaX892u8mV1hxnt2gjb22RloXMM6TovM3sSrJS0wH+l1nznd6 +aFXftS/G4ZVIVZ/LfT1is4StoyPWZCwwwly1z8qJQ/zhip5NgZTxQw4mi7ww35DY +PdAQOCoajfSvFjqslQ/cPRi/MRCu079heVb5fQnnzVtnpFQRAgMBAAGjYzBhMB0G +A1UdDgQWBBRTVTPyS+vQUbHBeJrBKDF77+rtSTAfBgNVHSMEGDAWgBRTVTPyS+vQ +UbHBeJrBKDF77+rtSTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAN +BgkqhkiG9w0BAQsFAAOCAgEAPx/IaK94n02wPxpnYTy+LVLIxwdq/kawNd6IbiMz +L87zmNMDmHcGbfoRCj8OkhuggX9Lx1/CkhpXimuYsZOFQi5blr/u+v4mIbsgbmi9 +7j+cUHDP0zLycvSvxKHty51LwmaX9a4wkJl5zBU4O1sd/H9tWcEmwJ39ltKoBKBx +c94Zc3iMm5ytRWGj+0rKzLDAXEWpoZ5bE5PLJauA6UDCxDLfs3FwhbS7uDggxYvf +jySF5FCNET94oJ+m8s7VeHvoa8iPGKvXrIqdd7XDHnqJJlVKr7m9S0fMbyEB8ci2 +RtOXDt93ifY1uhoEtEykn4dqBSp8ezvNMnwoXdYPDvTd9uCAFeWFLVreBAWxd25h +PsBTkZA5hpa/rA+mKv6Af4VBViYr8cz4dZCsFChuioVebe9ighrfjB//qKepFjPF +CyjzKN1u0JKm/2x/ORqxkTONG8p3uDwoIOyimUcTtTMv42bfYD88RKakqSFXE9G+ +Z0LlaKABqfjK49o/tsAp+c5LoNlYllKhnetO3QAdraHwdmC36BhoghzR1jpX751A +cZn2VH3Q4XKyp01cJNCJIrua+A+bx6zh3RyW6zIIkbRCbET+UD+4mr8WIcSE3mtR +ZVlnhUDO4z9//WKMVzwS9Rh8/kuszrGFI1KQozXCHLrce3YP6RYZfOed79LXaRwX +dYY= +-----END CERTIFICATE----- diff --git a/scripts/optf-has/has/has-properties/cert.cer b/scripts/optf-has/has/has-properties/cert.cer deleted file mode 100644 index 67bb1303..00000000 --- a/scripts/optf-has/has/has-properties/cert.cer +++ /dev/null @@ -1,36 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIGFjCCBP6gAwIBAgIQaTKJblnN1egdvyJmqxK6TDANBgkqhkiG9w0BAQsFADB+ -MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAd -BgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxLzAtBgNVBAMTJlN5bWFudGVj -IENsYXNzIDMgU2VjdXJlIFNlcnZlciBDQSAtIEc0MB4XDTE3MDgzMTAwMDAwMFoX -DTE4MDgzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMREwDwYDVQQIDAhNaWNoaWdh -bjETMBEGA1UEBwwKU291dGhmaWVsZDEcMBoGA1UECgwTQVQmVCBTZXJ2aWNlcywg -SW5jLjESMBAGA1UECwwJQ29uZHVjdG9yMSYwJAYDVQQDDB1lY29tcC1wZXctOTct -MDE3LnBlZGMuc2JjLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -ANiCKEitPcCKcmTTmvuwItG34wVOhhWuha1GQ9KeW/JmKgDWYM/7BwKmT6FhrSWe -998UKHKC+MriZKI6WsBoENu070zTyyphQ0SwTw7QZbeCpgrvSBv6+q9qWpkGZEQN -OgZ4IOVQX1asqh+qmUuVKWIAN1AF60iMb+Krqr04FX/N+3N9wLFfOJIS80Ycrxwa -2Kjqza9awVXOtuTHPa4hFqz7ggRoi7Ybdr8GyxNoXTP0QNCBsYYmjuTFnbfCnC/j -d/1zMn3D6G4eihnTnUB9jhM+Jj85IXcgAG5um/jEjN7qxmi+kURFl6AbadmgTCca -aIW1rOHZtR4vlA/sRWqSh28CAwEAAaOCAnwwggJ4MCgGA1UdEQQhMB+CHWVjb21w -LXBldy05Ny0wMTcucGVkYy5zYmMuY29tMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQD -AgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBhBgNVHSAEWjBYMFYG -BmeBDAECAjBMMCMGCCsGAQUFBwIBFhdodHRwczovL2Quc3ltY2IuY29tL2NwczAl -BggrBgEFBQcCAjAZDBdodHRwczovL2Quc3ltY2IuY29tL3JwYTAfBgNVHSMEGDAW -gBRfYM9hkFXfhEMUimAqsvV69EMY7zArBgNVHR8EJDAiMCCgHqAchhpodHRwOi8v -c3Muc3ltY2IuY29tL3NzLmNybDBXBggrBgEFBQcBAQRLMEkwHwYIKwYBBQUHMAGG -E2h0dHA6Ly9zcy5zeW1jZC5jb20wJgYIKwYBBQUHMAKGGmh0dHA6Ly9zcy5zeW1j -Yi5jb20vc3MuY3J0MIIBBgYKKwYBBAHWeQIEAgSB9wSB9ADyAHcA3esdK3oNT6Yg -i4GtgWhwfi6OnQHVXIiNPRHEzbbsvswAAAFeOADGyAAABAMASDBGAiEAzYxTfoKt -RnxlePKnJ0sCqLOvdd223T7CjqNsqbgmxfECIQC6FOBOe9J+a1poasZ7QfCVl9g2 -McAdcKofxp21Qw1DhwB3AKS5CZC0GFgUh7sTosxncAo8NZgE+RvfuON3zQ7IDdwQ -AAABXjgAxuAAAAQDAEgwRgIhAIUbjCQBxcxAXBT3MS77jIR3Lw90Y622+JGAuhH7 -PASuAiEAzblNSNu2GDHu/KINsiX4apBzXgSw5J8BM9LCAYPmUogwDQYJKoZIhvcN -AQELBQADggEBAIwOqd+U0iRFSt68vWh1ErMeY0I7Re/81cm17cAn1cQuhTNKFUwq -lYnVXZHFBkGhVAU0vXAI59XN29TQ3sjBlmfDdtxAJ3PzITBxeHswJjnqCaslEGik -sbdK4/cwCjWmAN0azKtUmKhH3ajnjyduWdlvCx5hsUdFmYGZ1yl+1QbTrwkkU9JB -bYjHNbtca0Orq8JlfZlc6L9vO6LNU6+qa9NTkLs2qd3rsCOXUiAWhGBdARB+a0AT -1ukrZDS2BZ6fUDmG2XxUsRPqUwuVNAb8NgOc0zLNaAe8CpU6fVzek1fZnL0KkJmK -jJnnuCr6AOteod19VIChd54mo0QtFm+i/Ww= ------END CERTIFICATE----- - diff --git a/scripts/optf-has/has/has-properties/cert.key b/scripts/optf-has/has/has-properties/cert.key deleted file mode 100644 index b8a957ff..00000000 --- a/scripts/optf-has/has/has-properties/cert.key +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEA2IIoSK09wIpyZNOa+7Ai0bfjBU6GFa6FrUZD0p5b8mYqANZg -z/sHAqZPoWGtJZ733xQocoL4yuJkojpawGgQ27TvTNPLKmFDRLBPDtBlt4KmCu9I -G/r6r2pamQZkRA06Bngg5VBfVqyqH6qZS5UpYgA3UAXrSIxv4quqvTgVf837c33A -sV84khLzRhyvHBrYqOrNr1rBVc625Mc9riEWrPuCBGiLtht2vwbLE2hdM/RA0IGx -hiaO5MWdt8KcL+N3/XMyfcPobh6KGdOdQH2OEz4mPzkhdyAAbm6b+MSM3urGaL6R -REWXoBtp2aBMJxpohbWs4dm1Hi+UD+xFapKHbwIDAQABAoIBAQCQVn1arjwL34CR -3UxmXK9p1si/YfEcBURTFxPiFva/bAK2mjTikrzCtHND6GVRPmCLVNn+NXh9cV6b -lIGp4fbTMhWSx2ObdkotQckC3EXjiHL/uTP+i1ySkzmg6NTxVUwIwg9UMTfOBcBI -6ifWbrOvBOvbKocHz7BLkhx6lygmEccyiy3wD/a/NBTRFTBLFyGrNBh2/a9ZXRqs -Gz1IxVSdxrNJZUoi1nKbBTOX5lKyjL0AyAkIEzC4MvgEBcGz5xZHFRF1cj4x0ajc -xEDsRUv0hi3Vczw5/FfKVWUVQPmY7sqpLtvu9qnb9MeZFwtrVZBxG5Ik4LP0Sjxt -0B1+EHYpAoGBAPeOpR1co9pJa8tgkObZWehrVd+VEMD9UM5SKfYYn/2FyVMl1/TH -Z6SqB7e1aNYsT5oUDt5y3g+tG3i/r4zmE4OzwT/9neb/rVBsKdd5cPICVnhHajYu -bdOKoCNEMBrQRBSBAeSK0IjbUYIMyre1bwhxU7HT5NzGJnLYBn4vx0BNAoGBAN/k -bxLQpsYcMwAX4K0H42qI1yL4jlezv4zj+kDRAI9Szh94c2yxGBC4rAub3Igz1OlQ -CfqPimvlnkWrhgz50+0CdJFPEQyC0+d2rzS7i816k8WYUYCDkrTJhr64eFnV1jjs -AuLpnhF0WpqvrixBzf5ZENPV3C8k4HG4KrYjDuSrAoGBALeDELdRY01/u97JuODI -IrP+TWwujnrhzbMEiYKbAo7nTDTNCuezogsY2BvA6PRLaL7pO5R/RkoMox7ByhsC -u1iYOht7oEALLKk/ZU0MA0QDo6IKHpwHkvaL/uXluFtIJA+nCoYmuSuamTN01BmW -77YsfESItVFLuljL9xQ3ytbJAoGAVqkd0SOQGgiaOQQFBBSUkwzqcO/ScOHzV756 -hBIh7Ff5zraZvs2Bah+BAHFQ2Ctv0usXIbPjuUXEkGUG2wjsXcXghsoa6EPPb71B -reCWCW/TuNzvVxYWeAG1NSdD9knNxHSd3WTduRXXaB5uBVVnPXcOC2Cw/FKCyaGm -bp99SUcCgYEAxzGq0cxFedF7TAQLjIMagsGIAatokzDvvQOvOK0lWZ+f17G+LV9Y -tLpnvS6IdGnki6Kvg9Xa0F4eP7YoY4laHxl2DEceP/TeMLNHetM9cXCPKwP7w/24 -5mZlQ0t/HdVnjc1uDvkeHR6HVxnXTyWtKBJ0FtC6SfdRgK20YYFrKAQ= ------END RSA PRIVATE KEY----- - diff --git a/scripts/optf-has/has/has-properties/cert.pem b/scripts/optf-has/has/has-properties/cert.pem deleted file mode 100644 index 5ecf3823..00000000 --- a/scripts/optf-has/has/has-properties/cert.pem +++ /dev/null @@ -1,36 +0,0 @@ -Bag Attributes - friendlyName: mso-client - localKeyID: 54 69 6D 65 20 31 35 31 39 32 39 37 30 37 31 32 33 33 -subject=/C=US/ST=Michigan/L=Southfield/O=AT&T Services, Inc./OU=mso-bpel-client-mtanj/CN=msobpel-client.mtanj.aic.cip.att.com -issuer=/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA ------BEGIN CERTIFICATE----- -MIIFZDCCBEygAwIBAgIQCDZ0gBbsclD2Ino3w+NqPDANBgkqhkiG9w0BAQsFADBN -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMScwJQYDVQQDEx5E -aWdpQ2VydCBTSEEyIFNlY3VyZSBTZXJ2ZXIgQ0EwHhcNMTgwMTE5MDAwMDAwWhcN -MTkwMTE5MTIwMDAwWjCBojELMAkGA1UEBhMCVVMxETAPBgNVBAgTCE1pY2hpZ2Fu -MRMwEQYDVQQHEwpTb3V0aGZpZWxkMRwwGgYDVQQKDBNBVCZUIFNlcnZpY2VzLCBJ -bmMuMR4wHAYDVQQLExVtc28tYnBlbC1jbGllbnQtbXRhbmoxLTArBgNVBAMTJG1z -b2JwZWwtY2xpZW50Lm10YW5qLmFpYy5jaXAuYXR0LmNvbTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAOJtbcWtMUYCIgIvdqm2CPN/cVTD8j3fDAsd42vn -7I3PYJ4aBu8tiJVRheJhj9mejfwjBd5f5E2z9kWfNMPZU/9q0RB+cYbKWv0lP+q5 -q/RkbXN7iRtGUkXUyNpekvxNT3IKYfXK3P29qVDVhvUSey2ngIALRvBrRIKRTmb8 -gzrvcavJSwm8oQw2JXE1+Da+8PYR3TjJ19nfmoTmKbO+QDD58I5+2TgNqd/b7zhN -GLaS3oiVONDmJ1b5iWwKg31otPDP8AJb7cNtl8vgfnGK2zvFIWnF2TRzMb6FePbn -JBLaEyi7+c1iKJafj61t5nn27I2psbJloT9/2fmb6l4NU8MCAwEAAaOCAegwggHk -MB8GA1UdIwQYMBaAFA+AYRyCMWHVLyjnjUY4tCzhxtniMB0GA1UdDgQWBBSQcljn -BCxIKpisBfyoNgGCdtPzBzAvBgNVHREEKDAmgiRtc29icGVsLWNsaWVudC5tdGFu -ai5haWMuY2lwLmF0dC5jb20wDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsG -AQUFBwMBBggrBgEFBQcDAjBrBgNVHR8EZDBiMC+gLaArhilodHRwOi8vY3JsMy5k -aWdpY2VydC5jb20vc3NjYS1zaGEyLWc2LmNybDAvoC2gK4YpaHR0cDovL2NybDQu -ZGlnaWNlcnQuY29tL3NzY2Etc2hhMi1nNi5jcmwwTAYDVR0gBEUwQzA3BglghkgB -hv1sAQEwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQ -UzAIBgZngQwBAgIwfAYIKwYBBQUHAQEEcDBuMCQGCCsGAQUFBzABhhhodHRwOi8v -b2NzcC5kaWdpY2VydC5jb20wRgYIKwYBBQUHMAKGOmh0dHA6Ly9jYWNlcnRzLmRp -Z2ljZXJ0LmNvbS9EaWdpQ2VydFNIQTJTZWN1cmVTZXJ2ZXJDQS5jcnQwCQYDVR0T -BAIwADANBgkqhkiG9w0BAQsFAAOCAQEAxkadmzFcpA3f3qc9PbzMWfV2lJCXWxfr -/6z4RXotl255GBZFR2zLn56k8J3hAJGWRc0WeSgSsLH1fxrxF60fWk+cmYCrMC9t -C5ha5zWav/kz+dkZvJVbUxIFdx0Cd5uqBsLFnAaGrnSR6WzJkZHQ2rQUvwvQXwdP -XL01FleDSNbV8jtHXvzmcdnVQWeLjcVOeOeBF3dW6lSvDRV0G6fe6+R9U+Gz0MwK -x93XbsIAMTCJKUBkV7QdHwHzis3fhKJHwJUrb1p2Byhn/RwYUmFbjkamFiEfAyzw -+KdkwripOgYHnmGyLBJ16FdO/8kGhn4URW/qL1FO/sN2loGGlyA82w== ------END CERTIFICATE----- diff --git a/scripts/optf-has/has/has-properties/conductor.conf.onap b/scripts/optf-has/has/has-properties/conductor.conf.onap index 2c5b8d6c..c000248c 100644 --- a/scripts/optf-has/has/has-properties/conductor.conf.onap +++ b/scripts/optf-has/has/has-properties/conductor.conf.onap @@ -1,4 +1,3 @@ - [DEFAULT] # @@ -9,7 +8,14 @@ #api_paste_config = api_paste.ini # Music keyspace for content (string value) -keyspace = conductor +#keyspace = conductor + +# Delay time (Seconds) for MUSIC requests. Set it to 2 seconds by default. +# (integer value) +#delay_time = 2 + +# (boolean value) +#HPA_enabled = true # # From oslo.log @@ -20,12 +26,6 @@ keyspace = conductor # Note: This option can be changed without restarting. debug = true -# DEPRECATED: If set to false, the logging level will be set to WARNING instead -# of the default INFO level. (boolean value) -# This option is deprecated for removal. -# Its value may be silently ignored in the future. -#verbose = true - # The name of a logging configuration file. This file is appended to any # existing logging configuration files. For details about logging configuration # files, see the Python logging module documentation. Note that when logging @@ -39,7 +39,7 @@ log_config_append = /usr/local/bin/log.conf # Defines the format string for %%(asctime)s in log records. Default: # %(default)s . This option is ignored if log_config_append is set. (string # value) -log_date_format = %d-%m-%Y %H:%M:%S +#log_date_format = %Y-%m-%d %H:%M:%S # (Optional) Name of log file to send logging output to. If no default is set, # logging will go to stderr as defined by use_stderr. This option is ignored if @@ -47,15 +47,11 @@ log_date_format = %d-%m-%Y %H:%M:%S # Deprecated group/name - [DEFAULT]/logfile #log_file = application.log - # (Optional) The base directory used for relative log_file paths. This option # is ignored if log_config_append is set. (string value) # Deprecated group/name - [DEFAULT]/logdir log_dir = /var/log - - - # Uses logging handler designed to watch file system. When log file is moved or # removed this handler will open a new log file with specified path # instantaneously. It makes sense only if log_file option is specified and @@ -68,10 +64,20 @@ log_dir = /var/log # is set. (boolean value) #use_syslog = false +# Enable journald for logging. If running in a systemd environment you may wish +# to enable journal support. Doing so will use the journal native protocol +# which includes structured metadata in addition to log messages.This option is +# ignored if log_config_append is set. (boolean value) +#use_journal = false + # Syslog facility to receive log lines. This option is ignored if # log_config_append is set. (string value) #syslog_log_facility = LOG_USER +# Use JSON formatting for logging. This option is ignored if log_config_append +# is set. (boolean value) +#use_json = false + # Log output to standard error. This option is ignored if log_config_append is # set. (boolean value) #use_stderr = false @@ -96,7 +102,7 @@ log_dir = /var/log # List of package logging levels in logger=LEVEL pairs. This option is ignored # if log_config_append is set. (list value) -#default_log_levels = amqp=WARN,amqplib=WARN,boto=WARN,qpid=WARN,sqlalchemy=WARN,suds=INFO,oslo.messaging=INFO,iso8601=WARN,requests.packages.urllib3.connectionpool=WARN,urllib3.connectionpool=WARN,websocket=WARN,requests.packages.urllib3.util.retry=WARN,urllib3.util.retry=WARN,keystonemiddleware=WARN,routes.middleware=WARN,stevedore=WARN,taskflow=WARN,keystoneauth=WARN,oslo.cache=INFO,dogpile.core.dogpile=INFO +#default_log_levels = amqp=WARN,amqplib=WARN,boto=WARN,qpid=WARN,sqlalchemy=WARN,suds=INFO,oslo.messaging=INFO,oslo_messaging=INFO,iso8601=WARN,requests.packages.urllib3.connectionpool=WARN,urllib3.connectionpool=WARN,websocket=WARN,requests.packages.urllib3.util.retry=WARN,urllib3.util.retry=WARN,keystonemiddleware=WARN,routes.middleware=WARN,stevedore=WARN,taskflow=WARN,keystoneauth=WARN,oslo.cache=INFO,dogpile.core.dogpile=INFO # Enables or disables publication of error events. (boolean value) #publish_errors = false @@ -125,6 +131,53 @@ log_dir = /var/log #fatal_deprecations = false +[aaf_authentication] + +# +# From conductor +# + +# is_aaf_enabled. (boolean value) +#is_aaf_enabled = true + +# aaf_cache_expiry_hrs. (integer value) +#aaf_cache_expiry_hrs = 3 + +# aaf_url. (string value) +aaf_url = http://localhost:8100/authz/perms/user/ + +# aaf_retries. (integer value) +#aaf_retries = 3 + +# aaf_timeout. (integer value) +#aaf_timeout = 100 + +# aaf_user_roles. (list value) +#aaf_user_roles = {"type": "org.onap.oof","instance": "plans","action": "GET"},{"type": "org.onap.oof","instance": "plans","action": "POST"} + + +[aaf_sms] + +# +# From conductor +# + +# Base URL for SMS, up to and not including the version, and without a trailing +# slash. (string value) +#aaf_sms_url = https://aaf-sms.onap:10443 + +# Timeout for SMS API Call (integer value) +#aaf_sms_timeout = 30 + +# Path to the cacert that will be used to verify If this is None, verify will +# be False and the server certis not verified by the client. (string value) +#aaf_ca_certs = AAF_RootCA.cer + +# Domain UUID - A unique UUID generated when the domainfor HAS is created by +# administrator during deployment (string value) +#secret_domain = has + + [aai] # @@ -132,29 +185,51 @@ log_dir = /var/log # # Interval with which to refresh the local cache, in minutes. (integer value) +#cache_refresh_interval = 1440 cache_refresh_interval = 1 + +# Interval with which to refresh the local complex cache, in minutes. (integer +# value) +#complex_cache_refresh_interval = 1440 complex_cache_refresh_interval = 60 # Data Store table prefix. (string value) #table_prefix = aai -# Base URL for A&AI, up to and including the version. (string value) +# Base URL for A&AI, up to and not including the version, and without a +# trailing slash. (string value) +#server_url = https://controller:8443/aai server_url = http://localhost:8081/aai/ +# Timeout for A&AI Rest Call (string value) +#aai_rest_timeout = 30 -# The version of A&AI (string value) -server_url_version = v13 +# Number of retry for A&AI Rest Call (string value) +#aai_retries = 3 + +# The version of A&AI in v# format. (string value) +server_url_version = v14 # SSL/TLS certificate file in pem format. This certificate must be registered # with the A&AI endpoint. (string value) -certificate_file = /usr/local/bin/cert.cer +#certificate_file = certificate.pem +certificate_file = # Private Certificate Key file in pem format. (string value) -certificate_key_file = /usr/local/bin/cert.key +#certificate_key_file = certificate_key.pem +certificate_key_file = # Certificate Authority Bundle file in pem format. Must contain the appropriate -# trust chain for theCertificate file. (string value) -certificate_authority_bundle_file = /usr/local/bin/cert.pem +# trust chain for the Certificate file. (string value) +#certificate_authority_bundle_file = certificate_authority_bundle.pem +certificate_authority_bundle_file = /usr/local/bin/AAF_RootCA.cer + +# Username for AAI. (string value) +username = OOF + +# Password for AAI. (string value) +password = OOF + [api] @@ -169,19 +244,28 @@ certificate_authority_bundle_file = /usr/local/bin/cert.pem # Minimum value: 1 #default_api_return_limit = 100 + [conductor_api] -# Basic Authentication Username (string value) +# +# From conductor +# + +# Base URL for plans. (string value) +#server_url = + +# username for plans. (string value) +#username = username = admin1 -# Basic Authentication Password (string value) +# password for plans. (string value) +#password = password = plan.15 -# To disable basic_auth_secure = false and to enable basic_auth_secure = true +# auth toggling. (boolean value) basic_auth_secure = false - [controller] # @@ -200,6 +284,47 @@ basic_auth_secure = false # Minimum value: 1 #workers = 1 +# Set to True when controller will run in active-active mode. When set to +# False, controller will flush any abandoned messages at startup. The +# controller always restarts abandoned template translations at startup. +# (boolean value) +#concurrent = false +concurrent = true + +# Time between checking for new plans. Default value is 1. (integer value) +# Minimum value: 1 +#polling_interval = 1 + +# (integer value) +# Minimum value: 1 +#max_translation_counter = 1 + + +[data] + +# +# From conductor +# + +# Number of workers for data service. Default value is 1. (integer value) +# Minimum value: 1 +#workers = 1 + +# Set to True when data will run in active-active mode. When set to False, data +# will flush any abandoned messages at startup. (boolean value) +#concurrent = false +concurrent = true + +# Default value is -8000, which is the diameter of the earth. The distance +# cannot larger than this value (floating point value) +#existing_placement_cost = -8000.0 + +# (floating point value) +#cloud_candidate_cost = 2.0 + +# (floating point value) +#service_candidate_cost = 1.0 + [inventory_provider] @@ -208,7 +333,7 @@ basic_auth_secure = false # # Extensions list to use (list value) -# extensions = aai +#extensions = aai [messaging_server] @@ -218,17 +343,22 @@ basic_auth_secure = false # # Music keyspace for messages (string value) -keyspace = conductor_rpc +#keyspace = conductor_rpc # Wait interval while checking for a message response. Default value is 1 # second. (integer value) # Minimum value: 1 #check_interval = 1 -# Overall message response timeout. Default value is 10 seconds. (integer +# Overall message response timeout. Default value is 120 seconds. (integer # value) # Minimum value: 1 -timeout = 3600 +#response_timeout = 120 + +# Timeout for detecting a VM is down, and other VMs can pick the plan up. +# Default value is 5 minutes. (integer value) (integer value) +# Minimum value: 1 +#timeout = 300 # Number of workers for messaging service. Default value is 1. (integer value) # Minimum value: 1 @@ -242,25 +372,40 @@ timeout = 3600 #debug = false +[multicloud] + +# +# From conductor +# + +# Base URL for Multicloud without a trailing slash. (string value) +server_url = http://msb.onap.org:8082/api/multicloud + +# Timeout for Multicloud Rest Call (string value) +#multicloud_rest_timeout = 30 + +# Number of retry for Multicloud Rest Call (string value) +#multicloud_retries = 3 + +# The version of Multicloud API. (string value) +#server_url_version = v0 + + [music_api] # # From conductor # -music_new_version = True # Base URL for Music REST API without a trailing slash. (string value) server_url = http://localhost:8080/MUSIC/rest/v2 version = v2 -music_version = "2.5.3" -aafuser = conductor -aafpass = c0nduct0r -aafns = conductor # DEPRECATED: List of hostnames (round-robin access) (list value) # This option is deprecated for removal. # Its value may be silently ignored in the future. # Reason: Use server_url instead +#hostnames = # DEPRECATED: Port (integer value) # This option is deprecated for removal. @@ -274,13 +419,74 @@ aafns = conductor # Reason: Use server_url instead #path = +# Socket connection timeout (floating point value) +#connect_timeout = 3.05 + +# Socket read timeout (floating point value) +#read_timeout = 12.05 + # Lock timeout (integer value) #lock_timeout = 10 # Replication factor (integer value) #replication_factor = 1 -# debug = false +# Use mock API (boolean value) +#mock = false + +# (string value) +#music_topology = SimpleStrategy + +# Name of the first data center (string value) +#first_datacenter_name = + +# Number of replicas in first data center (integer value) +#first_datacenter_replicas = + +# Name of the second data center (string value) +#second_datacenter_name = + +# Number of replicas in second data center (integer value) +#second_datacenter_replicas = + +# Name of the third data center (string value) +#third_datacenter_name = + +# Number of replicas in third data center (integer value) +#third_datacenter_replicas = + +# new or old version (boolean value) +#music_new_version = +music_new_version = True + +# for version (string value) +#music_version = +music_version = "3.0.21" + +# username value that used for creating basic authorization header (string +# value) +#aafuser = +aafuser = conductor + +# password value that used for creating basic authorization header (string +# value) +#aafpass = +aafpass = c0nduct0r + +# AAF namespace field used in MUSIC request header (string value) +#aafns = +aafns = conductor + + +[prometheus] + +# +# From conductor +# + +# Prometheus Metrics Endpoint (list value) +#metrics_port = 8000,8001,8002,8003,8004 + [reservation] @@ -294,12 +500,23 @@ aafns = conductor #workers = 1 # Number of times reservation/release should be attempted. (integer value) -#reserve_retries = 3 +#reserve_retries = 1 + +# Timeout for detecting a VM is down, and other VMs can pick the plan up and +# resereve. Default value is 600 seconds. (integer value) (integer value) +# Minimum value: 1 +#timeout = 600 # Set to True when reservation will run in active-active mode. When set to # False, reservation will restart any orphaned reserving requests at startup. # (boolean value) #concurrent = false +concurrent = true + +# (integer value) +# Minimum value: 1 +#max_reservation_counter = 1 + [sdnc] @@ -313,14 +530,23 @@ aafns = conductor # Data Store table prefix. (string value) #table_prefix = sdnc -# Base URL for SDN-C. (string value) +# Base URL for SDN-C, up to and including the version. (string value) +#server_url = https://controller:8443/restconf/ server_url = http://localhost:8083/restconf/ # Basic Authentication Username (string value) +#username = username = admin # Basic Authentication Password (string value) -password = admin +#password = +password = Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U + +# Timeout for SDNC Rest Call (string value) +#sdnc_rest_timeout = 30 + +# Retry Numbers for SDNC Rest Call (string value) +#sdnc_retries = 3 [service_controller] @@ -330,7 +556,8 @@ password = admin # # Extensions list to use (list value) -extensions = sdnc +#extensions = sdnc + [solver] @@ -342,29 +569,25 @@ extensions = sdnc # Minimum value: 1 #workers = 1 +# The timeout value for solver service. Default value is 480 seconds. (integer +# value) +# Minimum value: 1 +#solver_timeout = 480 + # Set to True when solver will run in active-active mode. When set to False, # solver will restart any orphaned solving requests at startup. (boolean value) #concurrent = false +concurrent = true +# Timeout for detecting a VM is down, and other VMs can pick the plan up. This +# value should be larger than solver_timeoutDefault value is 10 minutes. +# (integer value) (integer value) +# Minimum value: 1 +#timeout = 600 -[multicloud] - -# -# From conductor -# - -# Base URL for Multicloud without a trailing slash. (string value) -server_url = http://msb.onap.org:8082/api/multicloud - -# Timeout for Multicloud Rest Call (string value) -multicloud_rest_timeout = 30 - -# Number of retry for Multicloud Rest Call (string value) -multicloud_retries = 3 - -# The version of Multicloud API. (string value) -server_url_version = v0 - +# (integer value) +# Minimum value: 1 +#max_solver_counter = 1 [vim_controller] @@ -374,5 +597,4 @@ server_url_version = v0 # # Extensions list to use (list value) -extensions = multicloud - +#extensions = multicloud diff --git a/scripts/optf-has/has/has_script.sh b/scripts/optf-has/has/has_script.sh index 24ecc063..7f77dbbb 100755 --- a/scripts/optf-has/has/has_script.sh +++ b/scripts/optf-has/has/has_script.sh @@ -32,17 +32,13 @@ COND_CONF=/tmp/conductor/properties/conductor.conf LOG_CONF=/tmp/conductor/properties/log.conf IMAGE_NAME=nexus3.onap.org:10001/onap/optf-has IMAGE_VER=1.2.1-SNAPSHOT-latest -CERT=/tmp/conductor/properties/cert.cer -KEY=/tmp/conductor/properties/cert.key -BUNDLE=/tmp/conductor/properties/cert.pem +BUNDLE=/tmp/conductor/properties/AAF_RootCA.cer mkdir -p /tmp/conductor/properties mkdir -p /tmp/conductor/logs cp ${WORKSPACE}/scripts/optf-has/has/has-properties/conductor.conf.onap /tmp/conductor/properties/conductor.conf cp ${WORKSPACE}/scripts/optf-has/has/has-properties/log.conf.onap /tmp/conductor/properties/log.conf -cp ${WORKSPACE}/scripts/optf-has/has/has-properties/cert.cer /tmp/conductor/properties/cert.cer -cp ${WORKSPACE}/scripts/optf-has/has/has-properties/cert.key /tmp/conductor/properties/cert.key -cp ${WORKSPACE}/scripts/optf-has/has/has-properties/cert.pem /tmp/conductor/properties/cert.pem +cp ${WORKSPACE}/scripts/optf-has/has/has-properties/AAF_RootCA.cer /tmp/conductor/properties/AAF_RootCA.cer #chmod -R 777 /tmp/conductor/properties MUSIC_IP=`docker inspect --format '{{ .NetworkSettings.Networks.bridge.IPAddress}}' music-tomcat` @@ -63,23 +59,29 @@ echo "MULTICLOUDSIM_IP=${MULTICLOUDSIM_IP}" # change MULTICLOUD reference to the local instance sed -i -e "s%msb.onap.org:8082/%${MULTICLOUDSIM_IP}:8082/%g" /tmp/conductor/properties/conductor.conf +AAFSIM_IP=`docker inspect --format '{{ .NetworkSettings.Networks.bridge.IPAddress}}' aafsim` +echo "AAFSIM_IP=${AAFSIM_IP}" + +# change AAF reference to the local instance +sed -i -e "s%localhost:8100/%${AAFSIM_IP}:8100/%g" /tmp/conductor/properties/conductor.conf + #onboard conductor into music echo "Query MUSIC to check for reachability. Query Version" curl -vvvvv --noproxy "*" --request GET http://${MUSIC_IP}:8080/MUSIC/rest/v2/version -H "Content-Type: application/json" - + echo "Onboard conductor into music" -curl -vvvvv --noproxy "*" --request POST http://${MUSIC_IP}:8080/MUSIC/rest/v2/admin/onboardAppWithMusic -H "Content-Type: application/json" --data @${WORKSPACE}/tests/optf-has/has/data/onboard.json +curl -vvvvv --noproxy "*" --request POST http://${MUSIC_IP}:8080/MUSIC/rest/v2/admin/onboardAppWithMusic -H "Content-Type: application/json" -H "Authorization: Basic Y29uZHVjdG9yOmMwbmR1Y3Qwcg==" --data @${WORKSPACE}/tests/optf-has/has/data/onboard.json docker run -d --name cond-cont -v ${COND_CONF}:/usr/local/bin/conductor.conf -v ${LOG_CONF}:/usr/local/bin/log.conf ${IMAGE_NAME}:${IMAGE_VER} python /usr/local/bin/conductor-controller --config-file=/usr/local/bin/conductor.conf -sleep 20 +sleep 15 docker run -d --name cond-api -p "8091:8091" -v ${COND_CONF}:/usr/local/bin/conductor.conf -v ${LOG_CONF}:/usr/local/bin/log.conf ${IMAGE_NAME}:${IMAGE_VER} python /usr/local/bin/conductor-api --port=8091 -- --config-file=/usr/local/bin/conductor.conf -sleep 20 +sleep 15 docker run -d --name cond-solv -v ${COND_CONF}:/usr/local/bin/conductor.conf -v ${LOG_CONF}:/usr/local/bin/log.conf ${IMAGE_NAME}:${IMAGE_VER} python /usr/local/bin/conductor-solver --config-file=/usr/local/bin/conductor.conf -sleep 20 +sleep 15 docker run -d --name cond-resv -v ${COND_CONF}:/usr/local/bin/conductor.conf -v ${LOG_CONF}:/usr/local/bin/log.conf ${IMAGE_NAME}:${IMAGE_VER} python /usr/local/bin/conductor-reservation --config-file=/usr/local/bin/conductor.conf -sleep 20 -docker run -d --name cond-data -v ${COND_CONF}:/usr/local/bin/conductor.conf -v ${LOG_CONF}:/usr/local/bin/log.conf -v ${CERT}:/usr/local/bin/cert.cer -v ${KEY}:/usr/local/bin/cert.key -v ${BUNDLE}:/usr/local/bin/cert.pem ${IMAGE_NAME}:${IMAGE_VER} python /usr/local/bin/conductor-data --config-file=/usr/local/bin/conductor.conf -sleep 20 +sleep 5 +docker run -d --name cond-data -v ${COND_CONF}:/usr/local/bin/conductor.conf -v ${LOG_CONF}:/usr/local/bin/log.conf -v ${BUNDLE}:/usr/local/bin/AAF_RootCA.cer ${IMAGE_NAME}:${IMAGE_VER} python /usr/local/bin/conductor-data --config-file=/usr/local/bin/conductor.conf +sleep 15 COND_IP=`docker inspect --format '{{ .NetworkSettings.Networks.bridge.IPAddress}}' cond-api` ${WORKSPACE}/scripts/optf-has/has/wait_for_port.sh ${COND_IP} 8091 diff --git a/scripts/optf-has/has/music_script.sh b/scripts/optf-has/has/music_script.sh index 811a39c2..2a4f178d 100755 --- a/scripts/optf-has/has/music_script.sh +++ b/scripts/optf-has/has/music_script.sh @@ -22,67 +22,120 @@ echo "### This is ${WORKSPACE}/scripts/optf-has/has/music_script.sh" # # add here all the configuration steps eventually needed to be carried out for music CSIT testing # -echo "# music configuration step"; - -CASS_IMG=nexus3.onap.org:10001/onap/music/cassandra_music:latest -TOMCAT_IMG=nexus3.onap.org:10001/library/tomcat:8.0 +echo "########## music configuration step ##########"; +CASS_IMG=nexus3.onap.org:10001/onap/music/cassandra_3_11:latest +CASS_IMG_JOB=nexus3.onap.org:10001/onap/music/cassandra_job:latest +TOMCAT_IMG=nexus3.onap.org:10001/library/tomcat:8.5 ZK_IMG=nexus3.onap.org:10001/library/zookeeper:3.4 -MUSIC_IMG=nexus3.onap.org:10001/onap/music/music:2.5.3 +BUSYBOX_IMG=nexus3.onap.org:10001/library/busybox:latest +MUSIC_IMG=nexus3.onap.org:10001/onap/music/music:latest +TT=10 WORK_DIR=/tmp/music CASS_USERNAME=nelson24 CASS_PASSWORD=winman123 MUSIC_SOURCE_PROPERTIES=${WORKSPACE}/scripts/optf-has/has/music-properties MUSIC_PROPERTIES=/tmp/music/properties MUSIC_LOGS=/tmp/music/logs +CQL_FILES=${WORKSPACE}/scripts/music/cql +MUSIC_TRIGGER_DIR=/tmp/triggers +TRIGGER_JAR=musictrigger-0.1.0.jar +TRIGGER_JAR_URL=https://nexus.onap.org/service/local/repositories/autorelease-72298/content/org/onap/music/musictrigger/0.1.0/musictrigger-0.1.0.jar + mkdir -p ${MUSIC_PROPERTIES} mkdir -p ${MUSIC_LOGS} +mkdir -p ${MUSIC_LOGS}/MUSIC +mkdir -p /tmp/triggers + +# Get Trigger +echo "########## Get Trigger Jar ##########" +curl -o $MUSIC_TRIGGER_DIR/$TRIGGER_JAR $TRIGGER_JAR_URL cp ${MUSIC_SOURCE_PROPERTIES}/* ${WORK_DIR}/properties # Create Volume for mapping war file and tomcat +echo "########## create music-vol ##########" docker volume create --name music-vol; # Create a network for all the containers to run in. +echo "########## create music-net ##########" docker network create music-net; # Start Cassandra -docker run -d --name music-db --network music-net -p "7000:7000" -p "7001:7001" -p "7199:7199" -p "9042:9042" -p "9160:9160" -e CASSUSER=${CASS_USERNAME} -e CASSPASS=${CASS_PASSWORD} ${CASS_IMG}; -#CASSA_IP=`docker inspect --format '{{ .NetworkSettings.Networks.bridge.IPAddress}}' music-db` +echo "########## Start Cassandra (music-db) ##########" +docker run -d --name music-db --network music-net -p "7000:7000" -p "7001:7001" -p "7199:7199" -p "9042:9042" -p "9160:9160" \ +-v $MUSIC_TRIGGER_DIR/$TRIGGER_JAR:/etc/cassandra/triggers/$TRIGGER_JAR \ +${CASS_IMG}; + CASSA_IP=`docker inspect -f '{{ $network := index .NetworkSettings.Networks "music-net" }}{{ $network.IPAddress}}' music-db` echo "CASSANDRA_IP=${CASSA_IP}" ${WORKSPACE}/scripts/optf-has/has/wait_for_port.sh ${CASSA_IP} 9042 -sleep 150 + +# See if cassandra is up. +echo "########## Running Test to see if Cassandra is up ##########" +docker run --name music-casstest --network music-net \ +$BUSYBOX_IMG sh -c "until nc -z music-db 9042 && echo "success"; do echo 'No connection .. Sleeping for $TT seconds';sleep $TT; done;" + +# Check to see if Keyspaces are there. +docker exec music-db cqlsh -u cassandra -p cassandra -e "DESCRIBE keyspaces;" + +sleep 10; + +# Load data into Cassandra via Cassandra Job +echo "########## Running Cassandra Job (music-job) to load cql files ##########" +docker run -d --name music-job --network music-net \ +-v $CQL_FILES/admin.cql:/cql/admin.cql \ +-v $CQL_FILES/admin_pw.cql:/cql/admin_pw.cql \ +-v $CQL_FILES/extra:/cql/extra \ +-e PORT=9042 \ +-e CASS_HOSTNAME=music-db \ +-e USERNAME=$CASS_USERNAME \ +-e PASSWORD=$CASS_PASSWORD \ +$CASS_IMG_JOB +# Logs +echo "########## Cassandra Job logs ##########" +docker logs music-job + # Start Music war +echo "########## Start music-war ##########" docker run -d --name music-war -v music-vol:/app ${MUSIC_IMG}; -sleep 30 + # Start Zookeeper +echo "########## Start zookeeper (music-zk) ##########" docker run -d --name music-zk --network music-net -p "2181:2181" -p "2888:2888" -p "3888:3888" ${ZK_IMG}; -#ZOO_IP=`docker inspect --format '{{ .NetworkSettings.Networks.bridge.IPAddress}}' music-zk` + ZOO_IP=`docker inspect -f '{{ $network := index .NetworkSettings.Networks "music-net" }}{{ $network.IPAddress}}' music-zk` echo "ZOOKEEPER_IP=${ZOO_IP}" # Delay between Cassandra/Zookeeper and Tomcat -sleep 120 +sleep 10; # Start Up tomcat - Needs to have properties,logs dir and war file volume mapped. +echo "########## Start Tomcat (music-tomcat) ##########" docker run -d --name music-tomcat --network music-net -p "8080:8080" -v music-vol:/usr/local/tomcat/webapps -v ${WORK_DIR}/properties:/opt/app/music/etc:ro -v ${WORK_DIR}/logs:/opt/app/music/logs ${TOMCAT_IMG}; # Connect tomcat to host bridge network so that its port can be seen. +echo "########## Create Bridge for Tomcat ##########" docker network connect bridge music-tomcat; -# -# add here below the start of all docker containers needed for music CSIT testing -# - TOMCAT_IP=`docker inspect --format '{{ .NetworkSettings.Networks.bridge.IPAddress}}' music-tomcat` echo "TOMCAT_IP=${TOMCAT_IP}" ${WORKSPACE}/scripts/optf-has/has/wait_for_port.sh ${TOMCAT_IP} 8080 -# wait a while to make sure music is totally up and configured -sleep 90 +sleep 20; +echo "########## TOMCAT Logs ##########" +docker logs music-tomcat +# Needed only if we need to look at localhost logs. +echo "########## MUSIC localhost Log ##########" +docker exec music-tomcat /bin/bash -c "cat /usr/local/tomcat/logs/localhost*" + +echo "########## MUSIC Log ##########" +ls -al $MUSIC_LOGS/MUSIC +docker exec music-tomcat /bin/bash -c "cat /opt/app/music/logs/MUSIC/music.log" +#echo "########## MUSIC error log ##########" +#docker exec music-tomcat /bin/bash -c "cat /opt/app/music/logs/MUSIC/error.log" -echo "inspect docker things for tracing purpose" +echo "########## inspect docker things for tracing purpose ##########" docker inspect music-db docker inspect music-zk docker inspect music-tomcat @@ -90,11 +143,20 @@ docker inspect music-war docker volume inspect music-vol docker network inspect music-net -echo "dump music content just after music is started" +echo "########## dump music content just after music is started ##########" docker exec music-db /usr/bin/nodetool status docker exec music-db /usr/bin/cqlsh -unelson24 -pwinman123 -e 'SELECT * FROM system_schema.keyspaces' +docker exec music-db /usr/bin/cqlsh -unelson24 -pwinman123 -e 'DESCRIBE keyspace admin' docker exec music-db /usr/bin/cqlsh -unelson24 -pwinman123 -e 'SELECT * FROM admin.keyspace_master' +# +# add here all ROBOT_VARIABLES settings +# +echo "########## music robot variables settings ##########"; +ROBOT_VARIABLES="-v MUSIC_HOSTNAME:http://${TOMCAT_IP} -v MUSIC_PORT:8080 -v COND_HOSTNAME:http://localhost -v COND_PORT:8091" + +echo ${ROBOT_VARIABLES} + diff --git a/scripts/optf-has/has/music_teardown_script.sh b/scripts/optf-has/has/music_teardown_script.sh index 605ebd4e..e05ef9d1 100755 --- a/scripts/optf-has/has/music_teardown_script.sh +++ b/scripts/optf-has/has/music_teardown_script.sh @@ -14,15 +14,40 @@ # See the License for the specific language governing permissions and # limitations under the License. # -echo "music scripts docker containers killing"; + + +# +# add here below the killing of all docker containers used for music CSIT testing +# +echo "dump music.log files" +ls -alF /tmp/music +ls -alFR /tmp/music +ls -alF /tmp/music/properties +cat /tmp/music/properties/music.properties +echo "===== MUSIC log ==================" +docker exec music-tomcat /bin/bash -c "cat /opt/app/music/logs/MUSIC/music.log" +#cat /tmp/music/logs/MUSIC/music.log +echo "===== MUSIC error log ==================" +docker exec music-tomcat /bin/bash -c "cat /opt/app/music/logs/MUSIC/error.log" +#cat /tmp/music/logs/MUSIC/error.log + +echo "##########################################################"; +echo "#"; +echo "# music scripts docker containers killing"; +echo "#"; +echo "##########################################################"; docker stop music-tomcat docker stop music-war docker stop music-zk +docker stop music-job +docker stop music-casstest docker stop music-db docker rm music-zk docker rm music-tomcat docker rm music-war +docker rm music-job +docker rm music-casstest docker rm music-db docker network rm music-net; @@ -30,10 +55,9 @@ sleep 5; docker volume rm music-vol -echo "dump music.log files" -ls -alF /tmp/music -ls -alF /tmp/music/properties -cat /tmp/music/properties/music.properties -#cat /tmp/music/logs/MUSIC/music.log -cat /tmp/music/logs/MUSIC/error.log +#rm -Rf /tmp/music + + + + diff --git a/scripts/optf-has/has/simulator_script.sh b/scripts/optf-has/has/simulator_script.sh index 42dcd57f..ccb479b2 100755 --- a/scripts/optf-has/has/simulator_script.sh +++ b/scripts/optf-has/has/simulator_script.sh @@ -53,7 +53,7 @@ cat ./Dockerfile docker build -t aaisim . # run aaisim -docker run -d --name aaisim -p 8081:8081 aaisim +docker run -d --name aaisim -p 8081:8081 aaisim AAISIM_IP=`docker inspect --format '{{ .NetworkSettings.Networks.bridge.IPAddress}}' aaisim` echo "AAISIM_IP=${AAISIM_IP}" @@ -77,9 +77,32 @@ echo "MULTICLOUDSIM_IP=${MULTICLOUDSIM_IP}" ${WORKSPACE}/scripts/optf-has/has/wait_for_port.sh ${MULTICLOUDSIM_IP} 8082 +# prepare aafsim +echo "simulator_script: prepare aafsim " +cd ${WORK_DIR}/has/conductor/conductor/tests/functional/simulators/aafsim/ + +# check Dockerfile content +echo "simulator_script: Dockerfile " +cat ./Dockerfile + +# build aafsim +echo "simulator_script: build docker " +docker build -t aafsim . + +# run aafsim +echo "simulator_script: run docker " +docker run -d --name aafsim -p 8100:8100 aafsim + +AAFSIM_IP=`docker inspect --format '{{ .NetworkSettings.Networks.bridge.IPAddress}}' aafsim` +echo "simulator_script: AAFSIM_IP=${AAFSIM_IP}" + +#echo "simulator_script: wait_for_port" +${WORKSPACE}/scripts/optf-has/has/wait_for_port.sh ${AAFSIM_IP} 8100 + # wait a while before continuing sleep 2 echo "inspect docker things for tracing purpose" docker inspect aaisim docker inspect multicloudsim +docker inspect aafsim diff --git a/scripts/optf-has/has/simulator_teardown_script.sh b/scripts/optf-has/has/simulator_teardown_script.sh index a2edd332..eb29445a 100755 --- a/scripts/optf-has/has/simulator_teardown_script.sh +++ b/scripts/optf-has/has/simulator_teardown_script.sh @@ -17,6 +17,8 @@ echo "optf/has scripts docker containers killing"; docker stop aaisim docker stop multicloudsim +docker stop aafsim docker rm aaisim docker rm multicloudsim +docker rm aafsim diff --git a/tests/optf-has/has/optf_has_test.robot b/tests/optf-has/has/optf_has_test.robot index 3b3ee7a0..8bd313a9 100644 --- a/tests/optf-has/has/optf_has_test.robot +++ b/tests/optf-has/has/optf_has_test.robot @@ -5,6 +5,11 @@ Library json *** Variables *** ${MESSAGE} {"ping": "ok"} +${BASIC} Basic +${Music_AUTHVALUE} Y29uZHVjdG9yOmMwbmR1Y3Qwcg== +${HAS_AUTHVALUE} YWRtaW4xOnBsYW4uMTU= +${Music_Auth} ${BASIC} ${Music_AUTHVALUE} +${HAS_Auth} ${BASIC} ${HAS_AUTHVALUE} ${RESP_STATUS} "error" ${RESP_MESSAGE_WRONG_VERSION} "conductor_template_version must be one of: 2016-11-01" ${RESP_MESSAGE_WITHOUT_DEMANDS} Undefined Demand @@ -54,7 +59,7 @@ Check Music War Docker Container Get Music Version [Documentation] It sends a REST GET request to retrieve the Music.war version Create Session musicaas ${MUSIC_HOSTNAME}:${MUSIC_PORT} - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Get Request musicaas /MUSIC/rest/v2/version headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -109,7 +114,7 @@ Check ConductorData Docker Container Get Root Url [Documentation] It sends a REST GET request to root url Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Get Request optf-cond / headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -121,7 +126,7 @@ Conductor AddHealthcheck Row Into Music [Documentation] It sends a REST PUT request to Music to inject healthcheck plan Create Session musicaas ${MUSIC_HOSTNAME}:${MUSIC_PORT} ${data}= Get Binary File ${CURDIR}${/}data${/}healthcheck.json - &{headers}= Create Dictionary ns=conductor userId=conductor password=c0nduct0r Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary ns=conductor Authorization=${Music_Auth} userId=conductor password=c0nduct0r Content-Type=application/json Accept=application/json ${resp}= Put Request musicaas /MUSIC/rest/v2/keyspaces/conductor/tables/plans/rows?id=healthcheck data=${data} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -133,7 +138,7 @@ Conductor AddHealthcheck Row Into Music Healthcheck [Documentation] It sends a REST GET request to healthcheck url Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Get Request optf-cond /v1/plans/healthcheck headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -144,7 +149,7 @@ SendPlanWithWrongVersion [Documentation] It sends a POST request to conductor Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} ${data}= Get Binary File ${CURDIR}${/}data${/}plan_with_wrong_version.json - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -159,7 +164,7 @@ SendPlanWithWrongVersion GetPlanWithWrongVersion [Documentation] It sends a REST GET request to capture error Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -175,7 +180,7 @@ SendPlanWithoutDemandSection [Documentation] It sends a POST request to conductor Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} ${data}= Get Binary File ${CURDIR}${/}data${/}plan_without_demand_section.json - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -190,7 +195,7 @@ SendPlanWithoutDemandSection GetPlanWithoutDemandSection [Documentation] It sends a REST GET request to capture error Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -206,7 +211,7 @@ SendPlanWithWrongConstraint [Documentation] It sends a POST request to conductor Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} ${data}= Get Binary File ${CURDIR}${/}data${/}plan_with_wrong_distance_constraint.json - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -221,7 +226,7 @@ SendPlanWithWrongConstraint GetPlanWithWrongConstraint [Documentation] It sends a REST GET request to capture error Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -238,7 +243,7 @@ SendPlanWithLatiAndLongi [Documentation] It sends a POST request to conductor Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} ${data}= Get Binary File ${CURDIR}${/}data${/}plan_with_lati_and_longi.json - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -253,7 +258,7 @@ SendPlanWithLatiAndLongi GetPlanWithLatiAndLongi [Documentation] It sends a REST GET request to capture recommendations Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -269,7 +274,7 @@ SendPlanWithShortDistanceConstraint [Documentation] It sends a POST request to conductor Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} ${data}= Get Binary File ${CURDIR}${/}data${/}plan_with_short_distance_constraint.json - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -284,7 +289,7 @@ SendPlanWithShortDistanceConstraint GetPlanWithShortDistanceConstraint [Documentation] It sends a REST GET request to capture recommendations Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -300,7 +305,7 @@ SendPlanWithVimFit [Documentation] It sends a POST request to conductor Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} ${data}= Get Binary File ${CURDIR}${/}data${/}plan_with_vim_fit.json - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -315,7 +320,7 @@ SendPlanWithVimFit GetPlanWithVimFit [Documentation] It sends a REST GET request to capture recommendations Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -331,7 +336,7 @@ SendPlanWithHpa [Documentation] It sends a POST request to conductor Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} ${data}= Get Binary File ${CURDIR}${/}data${/}plan_with_hpa.json - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -346,7 +351,7 @@ SendPlanWithHpa GetPlanWithHpa [Documentation] It sends a REST GET request to capture recommendations Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -362,7 +367,7 @@ SendPlanWithHpaSimple [Documentation] It sends a POST request to conductor Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} ${data}= Get Binary File ${CURDIR}${/}data${/}plan_with_hpa_simple.json - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -377,7 +382,7 @@ SendPlanWithHpaSimple GetPlanWithHpaSimple [Documentation] It sends a REST GET request to capture recommendations Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -393,7 +398,7 @@ SendPlanWithHpaMandatory [Documentation] It sends a POST request to conductor Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} ${data}= Get Binary File ${CURDIR}${/}data${/}plan_with_hpa_requirements_mandatory.json - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -408,7 +413,7 @@ SendPlanWithHpaMandatory GetPlanWithHpaMandatory [Documentation] It sends a REST GET request to capture recommendations Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -424,7 +429,7 @@ SendPlanWithHpaOptionals [Documentation] It sends a POST request to conductor Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} ${data}= Get Binary File ${CURDIR}${/}data${/}plan_with_hpa_requirements_optionals.json - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -439,7 +444,7 @@ SendPlanWithHpaOptionals GetPlanWithHpaOptionals [Documentation] It sends a REST GET request to capture recommendations Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -455,7 +460,7 @@ SendPlanWithHpaUnmatched [Documentation] It sends a POST request to conductor Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} ${data}= Get Binary File ${CURDIR}${/}data${/}plan_with_hpa_unmatched.json - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -470,7 +475,7 @@ SendPlanWithHpaUnmatched GetPlanWithHpaUnmatched [Documentation] It sends a REST GET request to capture recommendations Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -487,7 +492,7 @@ SendPlanWithHpaScoreMultiObj [Documentation] It sends a POST request to conductor Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} ${data}= Get Binary File ${CURDIR}${/}data${/}plan_with_hpa_score_multi_objective.json - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Post Request optf-cond /v1/plans data=${data} headers=${headers} Log To Console ********************* Log To Console response = ${resp} @@ -502,7 +507,7 @@ SendPlanWithHpaScoreMultiObj GetPlanWithHpaScoreMultiObj [Documentation] It sends a REST GET request to capture recommendations Create Session optf-cond ${COND_HOSTNAME}:${COND_PORT} - &{headers}= Create Dictionary Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=${HAS_Auth} Content-Type=application/json Accept=application/json ${resp}= Get Request optf-cond /v1/plans/${generatedPlanId} headers=${headers} Log To Console ********************* Log To Console response = ${resp} -- 2.16.6