|
| 1 | +// The first "test" is of course whether the header compiles standalone |
| 2 | +#include "nmos/jwt_generator.h" |
| 3 | + |
| 4 | +#include "bst/test/test.h" |
| 5 | +#include "cpprest/basic_utils.h" |
| 6 | +#include "nmos/jwk_utils.h" // for nmos::experimental::jwk_exception |
| 7 | + |
| 8 | +namespace |
| 9 | +{ |
| 10 | + // this is the private key (rsa.api.testsuite.nmos.tv.key.pem) from the nmos-testing |
| 11 | + // https://https://github.com/AMWA-TV/nmos-testing/blob/master/test_data/BCP00301/ca/intermediate/private/rsa.api.testsuite.nmos.tv.key.pem |
| 12 | + const auto test_private_key = utility::s2us(R"(-----BEGIN RSA PRIVATE KEY----- |
| 13 | +MIIEogIBAAKCAQEAyXHgphlqcINx+ZKkBefDo5X5rHUuTpom9OcRKpWQHt7oYUr1 |
| 14 | +UhoKJ+8SxbsSvtlrvvGa6kiSk/m6i7haU9dGKSDJzndYJSi+Qbc2jfSPfoHtHvsy |
| 15 | +PIworhKniDA7YNE+olr23KGYSqdWidp3nzQLdaHuvOqjjjb3Jm2hvdt4Rfyk8r90 |
| 16 | +5FY1kdZ/rINtvUDNHZnno9xPw9Hk+xc/cfOJyLUxBndy5wSp7Dhl8Wg1tLuK0rIG |
| 17 | +JuFBFrZWykGySGP8s3KzeSeugojYa4JWoXFix6+hlTOfyyu5VXtDkTIZotXcAOBl |
| 18 | +EEFLNtSko0yzWuSDo1HF0IwwCvgmwFnewdgFGQIDAQABAoIBAGnZ2ebNsh1/JHO0 |
| 19 | +91VXDHk4BGL3jCanX9MOW/nZb0qZbNg68B99KVsEiAO4okgArVo/UFzNV6BD+B8U |
| 20 | +9vnZQ7e2z/QayAl2mEqlwBflq0UZdoTyD9q692FI0hmA5qKgMN5VGCSlEQYhWhrD |
| 21 | +3lmcmmzscyt3zAudnE7oCrZdzZxQD1r2dgjuLFiSaueUHPS/7FQavMx5sGGowcmN |
| 22 | +ex+nEHEBeRn5Ws7NWKtX6UoFa8btJIapsqkLHgtXgEsrbFDfLXbEgdFgXg36e8Ak |
| 23 | +lCuzUsehaM56eesVNyT/4FVN9ilJu0I1OlJs7sNXOIR4v//PqWoEnEGV/Fwb0YPT |
| 24 | +YWPr81ECgYEA7jIIQD9TKYdBdR2A5b8AmRAuVpYsC36Cw6n/3Mq/Le1Bf0nj1cVf |
| 25 | +JBkmLOYO/41h6Z+kITJfUZMniy6a/D7LXMSd/jwJM7WKLBfM/AIQHsSpIo/bkW/Q |
| 26 | +zVa2inDLYnICWAuR2KNWR46CWy6wnjlWdag76YYJxlk91vpy6RqUCtUCgYEA2ICb |
| 27 | +fBp5DNayESM7zDjh8PvgMn49tj6BjuO+oJ7vycQzDlgp/NV2kwtRpNQUcT4wAvTJ |
| 28 | +W/GHOlUTxIDxhZqJu3Ix5ue/R0YprhlZofSzwXVoqh+NvZGi4UYiJkTr7zXhzoU1 |
| 29 | +PV5vWb1YMqpiYJxA3BRj3K0YdVmPkdcoLsXgKzUCgYAuBh7QAyxXbtn3/h5kxfYg |
| 30 | +nR7G/jc+dVBg7B0TFV3BSwGHzcgnCv7qI63bqQwm1rOfh4gYHfqK8YsHepbZvGxg |
| 31 | +3WDFueXxRteO0355BxEEUO15TyCWxmsq8eFNeKPjvrGzP3EL0eue4etQIQJhYCTT |
| 32 | +kREaexqyZ5XqTvQbFFacjQKBgEhC1KKda12/ovtZWTIWokL+rpvryskzH6cDmLKf |
| 33 | +mcUsOSZGgu0iiksV8hAjwRby/K9f6H1JpirwDoL9zp8bL3Fi8gjxvMQbRPoY9/O4 |
| 34 | +au7dMyvlEDf/je/Gqss/IchboZx+lYCALoYzTmbKu78nJ/bMz2/uTkWMuQCiYYUL |
| 35 | +AoEpAoGAYIG2aCsuLV+1bPHC0vYvDC0V+NMA8e9HrplHdrQ4IBxyZnmHqvrGZ+04 |
| 36 | +huUpDxAX+hxYap0k0RPJ3HaFmIHz7DpStX/aIjcfucEnoev7OLj4/3j6s2tHfeWL |
| 37 | +JP+1+v/YSIKc7WXvz95YsmoJZ02Ikv8zBan9HIzczmkqDe0C1RQ= |
| 38 | +-----END RSA PRIVATE KEY----- |
| 39 | +)"); |
| 40 | + |
| 41 | +} |
| 42 | + |
| 43 | +BST_TEST_CASE(testClientAssertion) |
| 44 | +{ |
| 45 | + using namespace nmos::experimental; |
| 46 | + |
| 47 | + const utility::string_t issuer{ U("api.testsuite.nmos.tv") }; |
| 48 | + const utility::string_t subject{ U("api.testsuite.nmos.tv") }; |
| 49 | + const web::uri audience{ U("https://mocks.testsuite.nmos.tv:5010/testtoken") }; |
| 50 | + const std::chrono::seconds token_lifetime{ 100 }; |
| 51 | + const utility::string_t private_key{ test_private_key }; |
| 52 | + const utility::string_t keyid{ U("key_1") }; |
| 53 | + |
| 54 | + // bad cases |
| 55 | + const utility::string_t bad_issuer{}; |
| 56 | + BST_REQUIRE_THROW(jwt_generator::create_client_assertion(bad_issuer, subject, audience, token_lifetime, private_key, keyid), nmos::experimental::jwk_exception); |
| 57 | + |
| 58 | + const utility::string_t bad_subject{}; |
| 59 | + BST_REQUIRE_THROW(jwt_generator::create_client_assertion(issuer, bad_subject, audience, token_lifetime, private_key, keyid), nmos::experimental::jwk_exception); |
| 60 | + |
| 61 | + const utility::string_t bad_audience{}; |
| 62 | + BST_REQUIRE_THROW(jwt_generator::create_client_assertion(issuer, subject, bad_audience, token_lifetime, private_key, keyid), nmos::experimental::jwk_exception); |
| 63 | + |
| 64 | + const utility::string_t bad_private_key{}; |
| 65 | + BST_REQUIRE_THROW(jwt_generator::create_client_assertion(issuer, subject, audience, token_lifetime, bad_private_key, keyid), nmos::experimental::jwk_exception); |
| 66 | + |
| 67 | + // good case |
| 68 | + BST_REQUIRE_NO_THROW(jwt_generator::create_client_assertion(issuer, subject, audience, token_lifetime, private_key, keyid)); |
| 69 | +} |
0 commit comments