diff options
Diffstat (limited to 'tests/aaf/certservice')
-rw-r--r-- | tests/aaf/certservice/assets/invalid.csr | 1 | ||||
-rw-r--r-- | tests/aaf/certservice/assets/invalid.key | 1 | ||||
-rw-r--r-- | tests/aaf/certservice/assets/invalid_client_docker.env | 12 | ||||
-rw-r--r-- | tests/aaf/certservice/assets/valid_client.csr | 1 | ||||
-rw-r--r-- | tests/aaf/certservice/assets/valid_client.pk | 1 | ||||
-rw-r--r-- | tests/aaf/certservice/assets/valid_client_docker.env | 12 | ||||
-rw-r--r-- | tests/aaf/certservice/assets/valid_ra.csr | 1 | ||||
-rw-r--r-- | tests/aaf/certservice/assets/valid_ra.pk | 1 | ||||
-rw-r--r-- | tests/aaf/certservice/cert-service-test.robot | 60 | ||||
-rw-r--r-- | tests/aaf/certservice/libraries/CertClientManager.py | 105 | ||||
-rw-r--r-- | tests/aaf/certservice/resources/cert-service-keywords.robot | 104 | ||||
-rw-r--r-- | tests/aaf/certservice/resources/cert-service-properties.robot | 22 |
12 files changed, 321 insertions, 0 deletions
diff --git a/tests/aaf/certservice/assets/invalid.csr b/tests/aaf/certservice/assets/invalid.csr new file mode 100644 index 00000000..7284ab4d --- /dev/null +++ b/tests/aaf/certservice/assets/invalid.csr @@ -0,0 +1 @@ +aaaa
\ No newline at end of file diff --git a/tests/aaf/certservice/assets/invalid.key b/tests/aaf/certservice/assets/invalid.key new file mode 100644 index 00000000..6484fb6f --- /dev/null +++ b/tests/aaf/certservice/assets/invalid.key @@ -0,0 +1 @@ +bbbb
\ No newline at end of file diff --git a/tests/aaf/certservice/assets/invalid_client_docker.env b/tests/aaf/certservice/assets/invalid_client_docker.env new file mode 100644 index 00000000..7fbc666e --- /dev/null +++ b/tests/aaf/certservice/assets/invalid_client_docker.env @@ -0,0 +1,12 @@ +#Client envs +REQUEST_TIMEOUT=5000 +OUTPUT_PATH=/var/log +CA_NAME=Invalid +#Csr config envs +COMMON_NAME=onap.org +ORGANIZATION=Linux-Foundation +ORGANIZATION_UNIT=ONAP +LOCATION=San-Francisco +STATE=California +COUNTRY=US +SANS=example.com:example1.com:example3.com
\ No newline at end of file diff --git a/tests/aaf/certservice/assets/valid_client.csr b/tests/aaf/certservice/assets/valid_client.csr new file mode 100644 index 00000000..59e5c6af --- /dev/null +++ b/tests/aaf/certservice/assets/valid_client.csr @@ -0,0 +1 @@ +LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJREVqQ0NBZm9DQVFBd2daZ3hDekFKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJREFwRFlXeHBabTl5Ym1saApNUll3RkFZRFZRUUhEQTFUWVc0dFJuSmhibU5wYzJOdk1Sa3dGd1lEVlFRS0RCQk1hVzUxZUMxR2IzVnVaR0YwCmFXOXVNUTB3Q3dZRFZRUUxEQVJQVGtGUU1SQXdEZ1lEVlFRRERBZE9iMlJsTVRJek1TQXdIZ1lKS29aSWh2Y04KQVFrQkZoRkRiMjF0YjI1T1lXMWxRR051TG1OdmJUQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQwpBUW9DZ2dFQkFOa0dmdXNKN25CQkt3dG5DdEdpa2pwSzFvcE1HUlhQWXVzbG05eG9VS0xiTk8zeG9Mb3dDOVF0ClBuV2lDVUQrNVUrK1pmQXhpaGdxN29TYWh6dWdrTitwSm5DeG1mNFZTM2g4amk3YTU0QUJ4UmVJN2plQ3Z6RHMKNDkvVU5DNzMyN3NmaGI2NWJ1cnVMQkhibHNkQUFidkExa1NaeG52VWNvNElJczRiY0JRQlVDSFRoWVVDWXJrbwppSGR2N3cyMGkvWm5ha0ltMGNncEtaMzlUUU1qeVl2Q2tkNE1aRTJ1TGE4NkdEUVNuZ2lvb0tCenArclpvWFovCkI3cEc1SGhKd3FTZVRVRktnM2d0MUJxMnhvZzYydjJTbzVjMnZyVG0zSDdjNFJMbzlsaC9jMUxJd1BRUVlTYWUKMlRORGJlUnZmUlFzczFtUTVZa1VXdE5DeWJaTXplTUNBd0VBQWFBME1ESUdDU3FHU0liM0RRRUpEakVsTUNNdwpJUVlEVlIwUkJCb3dHSUlIVG05a1pURXlNNElOZEdWemRDNXZibUZ3TG05eVp6QU5CZ2txaGtpRzl3MEJBUXNGCkFBT0NBUUVBcnBIc0ZaLzBpaDdQa0JEeW1DR0FkcnRxU0VVOVdyK1l4SHE5cjlhaFpLbXQrQ1lSMlpCN1pSUGwKT0JYQWlKQVAyeTlxeWtZUnNqUUJvMncycE9GSEJRdWV1VjgzU0tsaWtlVm9na1kxUUhzTEtyVU1heitxZWRrYQpKYkVVMnNqRU9YcVpHMmhYbS9jaGQwMFEwQU8rODlLOU4yYndTSGx2V2prSEdtYTBHeTl4ZUNNVXBTcUNCekJ1CkdoL2JVdFdzcUd1YWtSYW9VSS9OalFoRFpZTThjTVBnaWlLbGNIT3A5QzNBOFJ4VmtNZkxOaUxpczRzbGM2b0YKRU9KcjFwVkNBWURzQ3BPSWdHaE51L2VUSkpXay9ZSi9IWmw2L3RKcEZOcGtIdWc3dG9HUUlLNVp3WHpDVGIxUgo3WUoraG9ydzF0R1lIRFFFYXQ0NVlLOEdwRFJUeVE9PQotLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0=
\ No newline at end of file diff --git a/tests/aaf/certservice/assets/valid_client.pk b/tests/aaf/certservice/assets/valid_client.pk new file mode 100644 index 00000000..c84908ff --- /dev/null +++ b/tests/aaf/certservice/assets/valid_client.pk @@ -0,0 +1 @@ +LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktnd2dnU2tBZ0VBQW9JQkFRRFpCbjdyQ2U1d1FTc0wKWndyUm9wSTZTdGFLVEJrVnoyTHJKWnZjYUZDaTJ6VHQ4YUM2TUF2VUxUNTFvZ2xBL3VWUHZtWHdNWW9ZS3U2RQptb2M3b0pEZnFTWndzWm4rRlV0NGZJNHUydWVBQWNVWGlPNDNncjh3N09QZjFEUXU5OXU3SDRXK3VXN3E3aXdSCjI1YkhRQUc3d05aRW1jWjcxSEtPQ0NMT0czQVVBVkFoMDRXRkFtSzVLSWgzYis4TnRJdjJaMnBDSnRISUtTbWQKL1UwREk4bUx3cEhlREdSTnJpMnZPaGcwRXA0SXFLQ2djNmZxMmFGMmZ3ZTZSdVI0U2NLa25rMUJTb040TGRRYQp0c2FJT3RyOWtxT1hOcjYwNXR4KzNPRVM2UFpZZjNOU3lNRDBFR0VtbnRrelEyM2tiMzBVTExOWmtPV0pGRnJUClFzbTJUTTNqQWdNQkFBRUNnZ0VBRm53cnppSTdSL29ZZ1pmdGNRYk02Nmt4VFNiUk9vZEFFbWpWR3lMYnArUGEKT2dUY3lDMk9MQzk3MXlnd21VRlBkTkdmTWlHUDB5MHZoU0dWZlVJSGdJUy83TkVaeVU5ZmdGNDNSUGQ5SUxBTwpRWC80WGx2M2Z4UXNEOWFtaVc4NG5zeUhTTmxoZW9tdW16TUxEaDI5a0R4TWR0TVAwMmlSYmRHOStXaXlWZ0FUCitpRlViRDRmRUtlQWl4eDRNUmswMmVzU001dERSVmRicHlHQzR4bzNSMGtPdU5MY21jWUlReE1HVFN5ZS85cEUKV21OcmkyNitZTUJNU1k1aUxrb055WlQ4U0tnaFV1R2JwRXpZUUM5dnpyQXpzS2RoNi8xVDJlSVA5eW9WU2dFZAprSjBoN0ZOY1pRa2pxY3YzR2oxMXRzTEw4aVJyWFBMclFncU02OW1uc1FLQmdRRHZlZVdBTkJpcFJGTzk3L0tNCk9WK2RIbTg1TXdLbXQ2bFZrakx5cDlDYUI1YTZUbzVVZnVmN215aWlDQ0tjcEtEcGdLZVhVTnlLM0hvMTJyTDYKZ09GVzVBOUpjT0hEWjUyeXRnNUZLNE91Zm9vTXUvbk5FTFcwS0lJUHo3Ni9FcGZ0M2orWmlORVVvV3BRNFN1WQphYmFwT0lVdWRaaXZwa1BicW5uUGpXa0szUUtCZ1FEb0FBZHBVYmpRREhNRlpiN2RKeExoVGNGSzBuWGZ5WmhNCkpkWXczR0J4U2N1TXNCVkZQdlAzRWVpS1RCbkY5Q2dodU9DNmRQUXltSStHbitraHFsWExBSit2T1NHUms3dUwKUStvQzhjMlJ3cXZtK3NyVm5VaDJ0bi9ZMVA4Uk1MTklLVUZaSVpxREJmQnFXWDh1SmQ3Q0Rkclg0RUxPQUhBZgpEcUJ5eXVuUHZ3S0JnUURKaG13U3drU0tsVHhmbDRBbWJ0VytrL0VIVXAwRmpZTkx4cGRuU3IrcUQzN1JVL0JFCnZQTWQ4a2wwYWFJdTdmK1g0TE9vQzkwOFlpUGFGQ3dQME10UTR1VFdhYzhqTUp3dDJ6VVJFbmhqTEl1aUFjSksKeHFnU2J4QmNtL2VxTmN4eTJWZnVMWXU5YjhUWFFWWDlrZUNzY1NycW1QMmZ1eXhadkJGOEQwVjVaUUtCZ1FDYwo1eUFjRDRRQldOb1ZoV2xmSWtUM2tXR3ZtOFRTbEFIblJoT2xPZllUeUVmY24xM1RWaThqSXI1MWdlQlFhNzhVCmgzZWRRdW5BcWtNdlZra1NWcVB0UmorNC90ZUFJRHpQaEIvbzIrWWV0VjBUT3Z3aEdsMWV4RENVMGdDcmZKZFQKcjJzZHY4ZEM0NnBrRXFFYjhjckV6Ui83cmhVZ1ExV1ErNUJ4OGwvTSt3S0JnQkJGMFJDVzZUaUJpQUkxY0NvTgo0NW1DbThuNnNrVS8vZ1kvb0ZueitUbExiZWN0U0lJcEgrbm1MWHFWamV4L1NPOGVNOE1Iekp5ZWRlWUxHck1LCnQwQ2t5a0h5cTQrOW5oSlB0aWQ2bzQra2o2MTRQQUVtYktKZytxYW90ckZmdWpDM3hEb00wQkdXYlcwRmR2WkwKR09tWXEwbnZ1TzY1UjJtWUlpREtiNm9GCi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0=
\ No newline at end of file diff --git a/tests/aaf/certservice/assets/valid_client_docker.env b/tests/aaf/certservice/assets/valid_client_docker.env new file mode 100644 index 00000000..7a219761 --- /dev/null +++ b/tests/aaf/certservice/assets/valid_client_docker.env @@ -0,0 +1,12 @@ +#Client envs +REQUEST_TIMEOUT=30000 +OUTPUT_PATH=/var/log +CA_NAME=RA +#Csr config envs +COMMON_NAME=onap.org +ORGANIZATION=Linux-Foundation +ORGANIZATION_UNIT=ONAP +LOCATION=San-Francisco +STATE=California +COUNTRY=US +SANS=example.com:sample.com
\ No newline at end of file diff --git a/tests/aaf/certservice/assets/valid_ra.csr b/tests/aaf/certservice/assets/valid_ra.csr new file mode 100644 index 00000000..5decd8ee --- /dev/null +++ b/tests/aaf/certservice/assets/valid_ra.csr @@ -0,0 +1 @@ +LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJRERqQ0NBZllDQVFBd2daWXhDekFKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJREFwRFlXeHBabTl5Ym1saApNUll3RkFZRFZRUUhEQTFUWVc0dFJuSmhibU5wYzJOdk1Sa3dGd1lEVlFRS0RCQk1hVzUxZUMxR2IzVnVaR0YwCmFXOXVNUTB3Q3dZRFZRUUxEQVJQVGtGUU1RNHdEQVlEVlFRRERBVkRiREV5TXpFZ01CNEdDU3FHU0liM0RRRUoKQVJZUlEyOXRiVzl1VG1GdFpVQmpiaTVqYjIwd2dnRWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUJEd0F3Z2dFSwpBb0lCQVFDL2VCWEprWi80UFdQV2F4Qy9veW9ybmNjdzNiVlM2QmRJbzJUaGh0SzU4OG9wczg4RG8zZkN3Tkk0Cm1aV0xhYUEzbi9lVzJ6SG1TVENzeE4yd1BCREJhWWNwNmxCN1B5bmJDd1ZmcU55ZWhNNWFXQjY4TXFWKzVEcTQKc1BhT0haandNYnlSMTA3dHh3dGtub3lZeHh3SzVCY21vUkNkTjhxYndpY2Q0ajd4bDVDeVBiV1hyYUc0bFY3SgpRU1hlYmRJVUkvaVVNY3dKVThFdEgxZnNUS01CVTNMTE5pSlJsMzBJSGZQSEhZVndWVGhOUC82cFo5WktOeHR5Cm5oK2ZJaUZpNm9mU2h1dXRFZ25xRXdxS2UyenRUV20xYTNGNVlIUk5Pb1FMODA0OXhhQWNhanVTaEZnejZOZzYKOWRha1hhdkd5ejlrOUJHMDh3TU9BejFNQlBoL0FnTUJBQUdnTWpBd0Jna3Foa2lHOXcwQkNRNHhJekFoTUI4RwpBMVVkRVFRWU1CYUNCVU5zTVRJemdnMTBaWE4wTG05dVlYQXViM0puTUEwR0NTcUdTSWIzRFFFQkN3VUFBNElCCkFRQ1kwaUxKQWpWS3FSc0dBdTJOVzBHaGdPbTAvdkF0RmNNTWJOTTRBUGFNS2hiWTd6SGdob2U5VHMxTlBaUXkKSnZFRHJzOFhsSWIxeFN4NXJ1dktlY0JzamVLbEIzaU13V0dDeGViQ0lCMEsvbTV0YWI4cGtYQU0wVmJ3QTVIOAprWGRJS0xwK2grTVRLRnBNczY0OHk3eFRtcGFmb05CWld2d1ArODRsR295RDROZWJiRTN1anY1R21Id1JuK0xQCkRRNmJjSWxoWGNSN0JEMnZYNFdqdmY1YmVwL00yeVd4SkJPaTRzYjQ1NWdtTVpvYUJGSjF2OWpybUd6aDk2THEKck9NTEhCK1VOS0o1Tm1aQXZZVkNaNFVvVFpXZ3VQZVlMaXR6U2F0L0l3RGdJb3NSYXQrUGdJSkJWbXgzY212LwpJU0tncmRxckpKVFlmWGZrRnE5RG5vWHAKLS0tLS1FTkQgQ0VSVElGSUNBVEUgUkVRVUVTVC0tLS0t
\ No newline at end of file diff --git a/tests/aaf/certservice/assets/valid_ra.pk b/tests/aaf/certservice/assets/valid_ra.pk new file mode 100644 index 00000000..b1ad633a --- /dev/null +++ b/tests/aaf/certservice/assets/valid_ra.pk @@ -0,0 +1 @@ +LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktnd2dnU2tBZ0VBQW9JQkFRQy9lQlhKa1ovNFBXUFcKYXhDL295b3JuY2N3M2JWUzZCZElvMlRoaHRLNTg4b3BzODhEbzNmQ3dOSTRtWldMYWFBM24vZVcyekhtU1RDcwp4TjJ3UEJEQmFZY3A2bEI3UHluYkN3VmZxTnllaE01YVdCNjhNcVYrNURxNHNQYU9IWmp3TWJ5UjEwN3R4d3RrCm5veVl4eHdLNUJjbW9SQ2ROOHFid2ljZDRqN3hsNUN5UGJXWHJhRzRsVjdKUVNYZWJkSVVJL2lVTWN3SlU4RXQKSDFmc1RLTUJVM0xMTmlKUmwzMElIZlBISFlWd1ZUaE5QLzZwWjlaS054dHluaCtmSWlGaTZvZlNodXV0RWducQpFd3FLZTJ6dFRXbTFhM0Y1WUhSTk9vUUw4MDQ5eGFBY2FqdVNoRmd6Nk5nNjlkYWtYYXZHeXo5azlCRzA4d01PCkF6MU1CUGgvQWdNQkFBRUNnZ0VCQUxOUFE2QXN0OUpqczU3M1Q0MFl3Z0pzMVVGbk1FdC9QV2J5VmlSNi9kZlYKZnN0Rk1DYXBMUnYvTmlCNWZMbzk1aVNScyszY1EwUDE0UmE3bXgxVGN5R2VzVTFJdWF4aVA5RjU1Y05yUVlsVwp1R1dWUnR0YTF2QVp6d0J1QWNpZjRUMTRacTl5SXVHOVdXY1dzSGJYYU9TdUxSd3BGSVVYM2ErMnlLbE0yME9sCjI2T0o2MDk2RjBtZWIvR1RMUTdLVms4MnBiOW5xSHE4OUtTY1VVZjA0b3FtV2kxdkRHMDVUUkNncHdGc1dtUHYKYVQyamNkN2x1TTdSWFFZN3Y3Ylp0Qjk1MzdMVDBHZHMyWnRSazBDK0JZVWxlYVR4VXNCcTJvM3FvRWN2T3NINQp3SUVEMElZc3h0anFuaSttaGRwVzdrSHViWFpoeVRKczYxQnBoTHkxZHFrQ2dZRUE5Vzc4bm0vZ0wxNmdCK3BJClJucTRvMVowR21xYlJpQXlCWm1QN25WK0RJRzBvZkdSSlR4bFBHT3JDd3QySUFjSVpxT3d0ZDVXdjd1KzdpdHAKVjdXNG1WQlh1NDZabTIzZ2RSMkpwNUpRWnRCaElxa3B3ZVBTN1doYjZ2YjFGT0tiWXFLZXoyYWdNSzFnZHZxawpLcmVYMmd4bXhjTmN4cDFoM1hHYWlhNDdTU3NDZ1lFQXg3WldFREpMbC9lbnp5UE1jOEF4QWszZFhLaVhhNXhBCnRzSzM5YUMrQ1BOaGV4YnBtNHlmc0JzL0hrdzJzdEk1Y3FEVnlrZGU2L05yM21Femg2RDJoK05tQmxwZ3RyaU8KK3R4RDJqRzRMME9mVEFXeEFsTzBwY2syNm1UUkt4VHlhWlBhcklidW42dXFlVThVNmQyeDkzS2ZQV1N0LzQ2ZQpFTnF6V2M3U2UvMENnWUIwd0w5YmYwemVPOTFVNXBaTE1NWDByWU85clVrQUt3Q2d1VlJHMDQySzFZamdJTkl6CkxHL2NNbTJEYTRoZDQvcVRHUHRQQ04ycmg5eGo0RExVanBXcUdSWWpHc3JuclhWQlFUUGlpeS9FT1F4OE9JeXMKdDN2M2c5VjJDTlM5Z3E3NFZQUEhKY0srWlR1bVhjVUtyUnVIbHE2dEZTcGxNU2tFOXEzVklSVUMwUUtCZ1FDNQpHQ0VEdWRtZDZ3WTRVUEY0aGpQbDhzeXF5QVl1MGc2WVZEZXpDMXVWYUJ4OHZHdWVvdUtOa1hNYVhZQ0VrNXB5Cnh1WGVKKyt0dDFuT0xVQlkvN0g5bDZCRFd4Z3Z3VFdqQXVwUUc2eWRBWXR1SmdnOEkrQlZsdnV5bWVYU2pBTncKSG55WlVpVnZEdWRjcnhLdS9hMm5yVEF3OGxMaGZBaTdqamFUa2NBNjhRS0JnRmRMREQycVc4RStHb3FhU1hFYgphT0w0ZHhNY1MyQnc0Ni92T1ZDREw4WGExbis4WVA0MHdDbXg2eEc4ZDdFUjdUTjFSUWovNElKRjByajl4bFhiCnFJejVkSGNBM3JKTVpKTHc4MmJURDR0S1VZNVZtOFVGQnE4NHhzaG4yblJqdTZkaTMrTkk1ajFMMVExcjBiU28KVnZCZE1zS0F1RXdiRS85aDlsbjFCRkNsCi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0=
\ No newline at end of file diff --git a/tests/aaf/certservice/cert-service-test.robot b/tests/aaf/certservice/cert-service-test.robot new file mode 100644 index 00000000..863d295f --- /dev/null +++ b/tests/aaf/certservice/cert-service-test.robot @@ -0,0 +1,60 @@ +*** Settings *** + +Documentation AAF Cert Service API test case scenarios +Library RequestsLibrary +Resource ./resources/cert-service-keywords.robot + +Suite Setup Create sessions + +*** Test Cases *** + +Health Check + [Tags] AAF-CERT-SERVICE + [Documentation] Service is up and running + Run health check + +Reload Configuration + [Tags] AAF-CERT-SERVICE + [Documentation] Configuration was changed + Send Get Request And Validate Response /reload 200 + +Check if application is ready + [Tags] AAF-CERT-SERVICE + [Documentation] Send request to /ready endpoint and expect 200 + Send Get Request And Validate Response /ready 200 + +Generate Certificate In RA Mode For CA Name + [Tags] AAF-CERT-SERVICE + [Documentation] Send request to ${CERT_SERVICE_ENDPOINT}/${RA_CA_NAME} endpoint and expect 200 + Send Get Request with Header And Expect Success ${CERT_SERVICE_ENDPOINT}/${RA_CA_NAME} ${VALID_RA_CSR_FILE} ${VALID_RA_PK_FILE} + +Report Not Found Error When Path To Service Is Not Valid + [Tags] AAF-CERT-SERVICE + [Documentation] Send request to ${CERT_SERVICE_ENDPOINT}/ endpoint and expect 404 + Send Get Request with Header And Expect Error ${CERT_SERVICE_ENDPOINT}/ ${VALID_CLIENT_CSR_FILE} ${VALID_CLIENT_PK_FILE} 404 + +Report Bad Request Error When Header Is Missing In Request + [Tags] AAF-CERT-SERVICE + [Documentation] Send request without header to ${CERT_SERVICE_ENDPOINT}/${CLIENT_CA_NAME} endpoint and expect 400 + Send Get Request And Validate Response ${CERT_SERVICE_ENDPOINT}/${CLIENT_CA_NAME} 400 + +Report Bad Request Error When CSR Is Not Valid + [Tags] AAF-CERT-SERVICE + [Documentation] Send request to ${CERT_SERVICE_ENDPOINT}/${CLIENT_CA_NAME} endpoint and expect 400 + Send Get Request with Header And Expect Error ${CERT_SERVICE_ENDPOINT}/${CLIENT_CA_NAME} ${INVALID_CSR_FILE} ${VALID_CLIENT_PK_FILE} 400 + +Report Bad Request Error When PK Is Not Valid + [Tags] AAF-CERT-SERVICE + [Documentation] Send request to ${CERT_SERVICE_ENDPOINT}/${CLIENT_CA_NAME} endpoint and expect 400 + Send Get Request with Header And Expect Error ${CERT_SERVICE_ENDPOINT}/${CLIENT_CA_NAME} ${VALID_CLIENT_CSR_FILE} ${INVALID_PK_FILE} 400 + +Cert Service Client successfully creates keystore and truststore + [Tags] AAF-CERT-SERVICE + [Documentation] Run with correct env and expected exit code 0 + Run Cert Service Client And Validate JKS File Creation And Client Exit Code ${VALID_ENV_FILE} 0 + +Run Cert Service Client Container And Validate Exit Code And API Response + [Tags] AAF-CERT-SERVICE + [Documentation] Run with invalid CaName env and expected exit code 5 + Run Cert Service Client And Validate Http Response Code And Client Exit Code ${INVALID_ENV_FILE} 404 5 + diff --git a/tests/aaf/certservice/libraries/CertClientManager.py b/tests/aaf/certservice/libraries/CertClientManager.py new file mode 100644 index 00000000..ebacf221 --- /dev/null +++ b/tests/aaf/certservice/libraries/CertClientManager.py @@ -0,0 +1,105 @@ +import docker +import os +import shutil +import tarfile +import re +from OpenSSL import crypto + +ARCHIVES_PATH = os.getenv("WORKSPACE") + "/archives/" +TMP_PATH = os.getenv("WORKSPACE") + "/tests/aaf/certservice/tmp" + +ERROR_API_REGEX = 'Error on API response.*[0-9]{3}' +RESPONSE_CODE_REGEX = '[0-9]{3}' + + +class CertClientManager: + + def run_client_container(self, client_image, container_name, path_to_env, request_url, network): + client = docker.from_env() + environment = self.read_list_env_from_file(path_to_env) + environment.append("REQUEST_URL=" + request_url) + container = client.containers.run(image=client_image, name=container_name, detach=True, environment=environment, + network=network) + exitcode = container.wait() + return exitcode + + def read_list_env_from_file(self, path): + f = open(path, "r") + r_list = [] + for line in f: + line = line.strip() + if line[0] != "#": + r_list.append(line) + return r_list + + def remove_client_container_and_save_logs(self, container_name, log_file_name): + client = docker.from_env() + container = client.containers.get(container_name) + text_file = open(ARCHIVES_PATH + "container_" + log_file_name + ".log", "w") + text_file.write(container.logs()) + text_file.close() + container.remove() + + def can_open_keystore_and_truststore_with_pass(self, container_name): + self.copy_jks_file_to_tmp_dir(container_name) + + keystore_pass_path = TMP_PATH + '/logs/log/keystore.pass' + keystore_jks_path = TMP_PATH + '/logs/log/keystore.jks' + can_open_keystore = self.can_open_jks_file_by_pass_file(keystore_pass_path, keystore_jks_path) + + truststore_pass_path = TMP_PATH + '/logs/log/truststore.pass' + truststore_jks_path = TMP_PATH + '/logs/log/truststore.jks' + can_open_truststore = self.can_open_jks_file_by_pass_file(truststore_pass_path, truststore_jks_path) + + self.remove_tmp_dir(TMP_PATH) + return can_open_keystore & can_open_truststore + + def copy_jks_file_to_tmp_dir(self, container_name): + os.mkdir(TMP_PATH) + self.copy_jks_file_from_container_to_tmp_dir(container_name) + self.extract_tar_file() + + def copy_jks_file_from_container_to_tmp_dir(self, container_name): + client = docker.from_env() + container = client.containers.get(container_name) + f = open(TMP_PATH + '/var_log.tar', 'wb') + bits, stat = container.get_archive('/var/log/') + for chunk in bits: + f.write(chunk) + f.close() + + def extract_tar_file(self): + my_tar = tarfile.open(TMP_PATH + '/var_log.tar') + my_tar.extractall(TMP_PATH + '/logs') + my_tar.close() + + def can_open_jks_file_by_pass_file(self, pass_file_path, jks_file_path): + try: + password = open(pass_file_path, 'rb').read() + crypto.load_pkcs12(open(jks_file_path, 'rb').read(), password) + return True + except: + return False + + def remove_tmp_dir(self, tmp_path): + shutil.rmtree(tmp_path) + + def can_find_api_response_in_logs(self, container_name): + logs = self.get_container_logs(container_name) + api_logs = re.findall(ERROR_API_REGEX, logs) + if api_logs: + return True + else: + return False + + def get_api_response_from_logs(self, container_name): + logs = self.get_container_logs(container_name) + error_api_message = re.findall(ERROR_API_REGEX, logs) + code = re.findall(RESPONSE_CODE_REGEX, error_api_message[0]) + return code[0] + + def get_container_logs(self, container_name): + client = docker.from_env() + container = client.containers.get(container_name) + logs = container.logs() + return logs diff --git a/tests/aaf/certservice/resources/cert-service-keywords.robot b/tests/aaf/certservice/resources/cert-service-keywords.robot new file mode 100644 index 00000000..e8576dd2 --- /dev/null +++ b/tests/aaf/certservice/resources/cert-service-keywords.robot @@ -0,0 +1,104 @@ +*** Settings *** + +Library RequestsLibrary +Library HttpLibrary.HTTP +Library Collections +Library ../libraries/CertClientManager.py +Resource ../../../common.robot +Resource ./cert-service-properties.robot + +*** Keywords *** + +Create sessions + [Documentation] Create all required sessions + Create Session aaf_cert_service_url ${AAFCERT_URL} + Set Suite Variable ${http_session} aaf_cert_service_url + +Run Healthcheck + [Documentation] Run Healthcheck + ${resp}= Get Request ${http_session} /actuator/health + Should Be Equal As Strings ${resp.status_code} 200 + Validate Recieved Response ${resp} status UP + +Validate Recieved Response + [Documentation] Validare message that has been received + [Arguments] ${resp} ${key} ${expected_value} + ${json}= Parse Json ${resp.content} + ${value}= Get From Dictionary ${json} ${key} + Should Be Equal As Strings ${value} ${expected_value} + +Send Get Request And Validate Response + [Documentation] Send request to passed url and validate received response + [Arguments] ${path} ${resp_code} + ${resp}= Get Request ${http_session} ${path} + Should Be Equal As Strings ${resp.status_code} ${resp_code} + +Send Get Request with Header + [Documentation] Send request to passed url + [Arguments] ${path} ${csr_file} ${pk_file} + [Return] ${resp} + ${headers}= Create Header with CSR and PK ${csr_file} ${pk_file} + ${resp}= Get Request ${http_session} ${path} headers=${headers} + +Send Get Request with Header And Expect Success + [Documentation] Send request to passed url and validate received response + [Arguments] ${path} ${csr_file} ${pk_file} + ${resp}= Send Get Request with Header ${path} ${csr_file} ${pk_file} + Should Be Equal As Strings ${resp.status_code} 200 + Check Message Recieved On Success ${resp.content} + +Check Message Recieved On Success + [Documentation] Check if correct messsage has been sent on successful request + [Arguments] ${content} + ${resp_content}= Parse Json ${content} + Dictionary Should Contain Key ${resp_content} certificateChain + @{list}= Get From Dictionary ${resp_content} certificateChain + List Should Contain Certificates @{list} + Dictionary Should Contain Key ${resp_content} trustedCertificates + +List Should Contain Certificates + [Documentation] Verify if list contains certificates + [Arguments] @{list} + :FOR ${content} IN @{list} + \ Should Contain ${content} BEGIN CERTIFICATE + \ Should Contain ${content} END CERTIFICATE + +Send Get Request with Header And Expect Error + [Documentation] Send request to passed url and validate received response + [Arguments] ${path} ${csr_file} ${pk_file} ${resp_code} + ${resp}= Send Get Request with Header ${path} ${csr_file} ${pk_file} + Should Be Equal As Strings ${resp.status_code} ${resp_code} + +Create Header with CSR and PK + [Documentation] Create header with CSR and PK + [Arguments] ${csr_file} ${pk_file} + [Return] ${headers} + ${csr}= Get Data From File ${csr_file} + ${pk}= Get Data From File ${pk_file} + ${headers}= Create Dictionary CSR=${csr} PK=${pk} + +Send Post Request And Validate Response + [Documentation] Send request to passed url and validate received response + [Arguments] ${path} ${resp_code} + ${resp}= Post Request ${http_session} ${path} + Should Be Equal As Strings ${resp.status_code} ${resp_code} + +Run Cert Service Client And Validate JKS File Creation And Client Exit Code + [Documentation] Run Cert Service Client Container And Validate Exit Code + [Arguments] ${env_file} ${expected_exit_code} + ${exit_code}= Run Client Container ${DOCKER_CLIENT_IMAGE} ${CLIENT_CONTAINER_NAME} ${env_file} ${CERT_ADDRESS} ${CERT_SERVICE_NETWORK} + ${can_open}= Can Open Keystore And Truststore With Pass ${CLIENT_CONTAINER_NAME} + Remove Client Container And Save Logs ${CLIENT_CONTAINER_NAME} positive_path + Should Be Equal As Strings ${exit_code} ${expected_exit_code} Client return: ${exitcode} exit code, but expected: ${expected_exit_code} + Should Be True ${can_open} Cannot Open Keystore/TrustStore by passpshase + +Run Cert Service Client And Validate Http Response Code And Client Exit Code + [Documentation] Run Cert Service Client Container And Validate Exit Code + [Arguments] ${env_file} ${expected_api_response_code} ${expected_exit_code} + ${exit_code}= Run Client Container ${DOCKER_CLIENT_IMAGE} ${CLIENT_CONTAINER_NAME} ${env_file} ${CERT_ADDRESS} ${CERT_SERVICE_NETWORK} + ${can_find_API_response}= Can Find Api Response In Logs ${CLIENT_CONTAINER_NAME} + ${api_response_code}= Get Api Response From Logs ${CLIENT_CONTAINER_NAME} + Remove Client Container And Save Logs ${CLIENT_CONTAINER_NAME} negative_path + Should Be True ${can_find_API_response} Cannot Find API response in logs + Should Be Equal As Strings ${api_response_code} ${expected_api_response_code} API return ${api_response_code} but expected: ${expected_api_response_code} + Should Be Equal As Strings ${exit_code} ${expected_exit_code} Client return unexpected exit code return: ${exitcode} , but expected: ${expected_exit_code} diff --git a/tests/aaf/certservice/resources/cert-service-properties.robot b/tests/aaf/certservice/resources/cert-service-properties.robot new file mode 100644 index 00000000..ea5352e9 --- /dev/null +++ b/tests/aaf/certservice/resources/cert-service-properties.robot @@ -0,0 +1,22 @@ +*** Variables *** + +${AAFCERT_URL} http://%{AAFCERT_IP}:8080 +${CLIENT_CA_NAME} Client +${RA_CA_NAME} RA +${CERT_SERVICE_ENDPOINT} /v1/certificate +${VALID_CLIENT_CSR_FILE} %{WORKSPACE}/tests/aaf/certservice/assets/valid_client.csr +${VALID_CLIENT_PK_FILE} %{WORKSPACE}/tests/aaf/certservice/assets/valid_client.pk +${VALID_RA_CSR_FILE} %{WORKSPACE}/tests/aaf/certservice/assets/valid_ra.csr +${VALID_RA_PK_FILE} %{WORKSPACE}/tests/aaf/certservice/assets/valid_ra.pk +${INVALID_CSR_FILE} %{WORKSPACE}/tests/aaf/certservice/assets/invalid.csr +${INVALID_PK_FILE} %{WORKSPACE}/tests/aaf/certservice/assets/invalid.key + + +${CERT_ADDRESS} ${AAFCERT_URL}/v1/certificate/ +${VALID_ENV_FILE} %{WORKSPACE}/tests/aaf/certservice/assets/valid_client_docker.env +${INVALID_ENV_FILE} %{WORKSPACE}/tests/aaf/certservice/assets/invalid_client_docker.env +${DOCKER_CLIENT_IMAGE} nexus3.onap.org:10001/onap/org.onap.aaf.certservice.aaf-certservice-client:latest +${CLIENT_CONTAINER_NAME} %{ClientContainerName} +${CERT_SERVICE_NETWORK} certservice_certservice + + |