in src/client/tst/ClientApiFunctionalityTest.cpp [8:167]
VOID ClientApiFunctionalityTest::authIntegrationTest(BOOL sync)
{
CLIENT_HANDLE clientHandle;
PKinesisVideoClient pKinesisVideoClient;
// Validate the client-level callbacks - starting from default base class object
EXPECT_EQ(1, ATOMIC_LOAD(&mGetSecurityTokenFuncCount));
EXPECT_EQ(0, ATOMIC_LOAD(&mGetDeviceCertificateFuncCount));
EXPECT_EQ(0, ATOMIC_LOAD(&mGetDeviceFingerprintFuncCount));
// Try the certificate integration first
mClientCallbacks.getSecurityTokenFn = NULL;
mClientCallbacks.getDeviceFingerprintFn = NULL;
if (!sync) {
EXPECT_EQ(STATUS_SUCCESS, createKinesisVideoClient(&mDeviceInfo, &mClientCallbacks, &clientHandle));
} else {
EXPECT_EQ(STATUS_SUCCESS, createKinesisVideoClientSync(&mDeviceInfo, &mClientCallbacks, &clientHandle));
}
pKinesisVideoClient = FROM_CLIENT_HANDLE(clientHandle);
EXPECT_EQ(0, STRCMP((PCHAR) pKinesisVideoClient->certAuthInfo.data, TEST_CERTIFICATE_BITS));
EXPECT_EQ(TEST_AUTH_EXPIRATION, pKinesisVideoClient->certAuthInfo.expiration);
// Extra one as the base test has already called the function once
EXPECT_EQ(1, ATOMIC_LOAD(&mGetSecurityTokenFuncCount));
EXPECT_EQ(1, ATOMIC_LOAD(&mGetDeviceCertificateFuncCount));
EXPECT_EQ(0, ATOMIC_LOAD(&mGetDeviceFingerprintFuncCount));
mClientCallbacks.getDeviceCertificateFn = getDeviceCertificateFunc;
mClientCallbacks.getSecurityTokenFn = getSecurityTokenFunc;
mClientCallbacks.getDeviceFingerprintFn = getDeviceFingerprintFunc;
EXPECT_TRUE(STATUS_SUCCEEDED(freeKinesisVideoClient(&clientHandle)));
// Try the provisioning
mClientCallbacks.getDeviceCertificateFn = NULL;
mClientCallbacks.getSecurityTokenFn = NULL;
// Currently provisioning is unsupported so it should fail
if (!sync) {
EXPECT_EQ(STATUS_CLIENT_PROVISION_CALL_FAILED,
createKinesisVideoClient(&mDeviceInfo, &mClientCallbacks, &clientHandle));
} else {
EXPECT_EQ(STATUS_CLIENT_PROVISION_CALL_FAILED,
createKinesisVideoClientSync(&mDeviceInfo, &mClientCallbacks, &clientHandle));
}
pKinesisVideoClient = FROM_CLIENT_HANDLE(clientHandle);
EXPECT_EQ(0, STRCMP(pKinesisVideoClient->deviceFingerprint, TEST_DEVICE_FINGERPRINT));
// Extra one as the base test has already called the function once
EXPECT_EQ(1, ATOMIC_LOAD(&mGetSecurityTokenFuncCount));
EXPECT_EQ(1, ATOMIC_LOAD(&mGetDeviceCertificateFuncCount));
EXPECT_EQ(SERVICE_CALL_MAX_RETRY_COUNT + 1, ATOMIC_LOAD(&mGetDeviceFingerprintFuncCount)); // MAX_RETRY_COUNT + 1 times
mClientCallbacks.getDeviceCertificateFn = getDeviceCertificateFunc;
mClientCallbacks.getSecurityTokenFn = getSecurityTokenFunc;
mClientCallbacks.getDeviceFingerprintFn = getDeviceFingerprintFunc;
EXPECT_TRUE(STATUS_SUCCEEDED(freeKinesisVideoClient(&clientHandle)));
// Try with all being null
mClientCallbacks.getDeviceCertificateFn = NULL;
mClientCallbacks.getSecurityTokenFn = NULL;
mClientCallbacks.getDeviceFingerprintFn = NULL;
// Currently provisioning is unsupported so it should fail
if (!sync) {
EXPECT_EQ(STATUS_CLIENT_PROVISION_CALL_FAILED,
createKinesisVideoClient(&mDeviceInfo, &mClientCallbacks, &clientHandle));
} else {
EXPECT_EQ(STATUS_CLIENT_PROVISION_CALL_FAILED,
createKinesisVideoClientSync(&mDeviceInfo, &mClientCallbacks, &clientHandle));
}
pKinesisVideoClient = FROM_CLIENT_HANDLE(clientHandle);
// EXPECT_EQ(0, pKinesisVideoClient->certAuthInfo.data[0]);
EXPECT_EQ(MAX_DEVICE_FINGERPRINT_LENGTH, STRLEN(pKinesisVideoClient->deviceFingerprint));
// EXPECT_EQ(TEST_AUTH_EXPIRATION, pKinesisVideoClient->certAuthInfo.expiration);
// Extra one as the base test has already called the function once
EXPECT_EQ(1, ATOMIC_LOAD(&mGetSecurityTokenFuncCount));
EXPECT_EQ(1, ATOMIC_LOAD(&mGetDeviceCertificateFuncCount));
EXPECT_EQ(SERVICE_CALL_MAX_RETRY_COUNT + 1, ATOMIC_LOAD(&mGetDeviceFingerprintFuncCount)); // MAX_RETRY_COUNT + 1
mClientCallbacks.getDeviceCertificateFn = getDeviceCertificateFunc;
mClientCallbacks.getSecurityTokenFn = getSecurityTokenFunc;
mClientCallbacks.getDeviceFingerprintFn = getDeviceFingerprintFunc;
EXPECT_TRUE(STATUS_SUCCEEDED(freeKinesisVideoClient(&clientHandle)));
// Try the security token integration and empty data
mClientCallbacks.getSecurityTokenFn = getEmptySecurityTokenFunc;
if (!sync) {
EXPECT_EQ(STATUS_SUCCESS, createKinesisVideoClient(&mDeviceInfo, &mClientCallbacks, &clientHandle));
} else {
EXPECT_EQ(STATUS_SUCCESS, createKinesisVideoClientSync(&mDeviceInfo, &mClientCallbacks, &clientHandle));
}
pKinesisVideoClient = FROM_CLIENT_HANDLE(clientHandle);
EXPECT_EQ(0, pKinesisVideoClient->tokenAuthInfo.data[0]);
if (!sync) {
EXPECT_EQ(0, pKinesisVideoClient->tokenAuthInfo.expiration);
} else {
// In case of SYNC we primed the state machine so we got the token from the certificate already
EXPECT_EQ(TEST_AUTH_EXPIRATION, pKinesisVideoClient->tokenAuthInfo.expiration);
}
EXPECT_EQ(0, STRCMP((PCHAR) pKinesisVideoClient->certAuthInfo.data, TEST_CERTIFICATE_BITS));
EXPECT_EQ(TEST_AUTH_EXPIRATION, pKinesisVideoClient->certAuthInfo.expiration);
// Extra one as the base test has already called the function once
EXPECT_EQ(2, ATOMIC_LOAD(&mGetSecurityTokenFuncCount));
EXPECT_EQ(2, ATOMIC_LOAD(&mGetDeviceCertificateFuncCount));
EXPECT_EQ(SERVICE_CALL_MAX_RETRY_COUNT + 1, ATOMIC_LOAD(&mGetDeviceFingerprintFuncCount)); // stays the same count
mClientCallbacks.getDeviceCertificateFn = getDeviceCertificateFunc;
mClientCallbacks.getSecurityTokenFn = getSecurityTokenFunc;
mClientCallbacks.getDeviceFingerprintFn = getDeviceFingerprintFunc;
EXPECT_TRUE(STATUS_SUCCEEDED(freeKinesisVideoClient(&clientHandle)));
// Try the empty token to call the cert
mClientCallbacks.getDeviceCertificateFn = getDeviceCertificateFunc;
mClientCallbacks.getSecurityTokenFn = getEmptySecurityTokenFunc;
if (!sync) {
EXPECT_EQ(STATUS_SUCCESS, createKinesisVideoClient(&mDeviceInfo, &mClientCallbacks, &clientHandle));
pKinesisVideoClient = FROM_CLIENT_HANDLE(clientHandle);
EXPECT_EQ(0, pKinesisVideoClient->tokenAuthInfo.expiration);
} else {
EXPECT_EQ(STATUS_SUCCESS, createKinesisVideoClientSync(&mDeviceInfo, &mClientCallbacks, &clientHandle));
pKinesisVideoClient = FROM_CLIENT_HANDLE(clientHandle);
EXPECT_EQ(TEST_AUTH_EXPIRATION, pKinesisVideoClient->tokenAuthInfo.expiration);
}
EXPECT_EQ(0, pKinesisVideoClient->tokenAuthInfo.data[0]);
EXPECT_NE(0, pKinesisVideoClient->certAuthInfo.data[0]);
EXPECT_EQ(TEST_AUTH_EXPIRATION, pKinesisVideoClient->certAuthInfo.expiration);
EXPECT_EQ('\0', pKinesisVideoClient->deviceFingerprint[0]);
// Extra one as the base test has already called the function once
EXPECT_EQ(3, ATOMIC_LOAD(&mGetSecurityTokenFuncCount));
EXPECT_EQ(3, ATOMIC_LOAD(&mGetDeviceCertificateFuncCount));
EXPECT_EQ(SERVICE_CALL_MAX_RETRY_COUNT + 1, ATOMIC_LOAD(&mGetDeviceFingerprintFuncCount));
mClientCallbacks.getDeviceCertificateFn = getDeviceCertificateFunc;
mClientCallbacks.getSecurityTokenFn = getSecurityTokenFunc;
mClientCallbacks.getDeviceFingerprintFn = getDeviceFingerprintFunc;
EXPECT_TRUE(STATUS_SUCCEEDED(freeKinesisVideoClient(&clientHandle)));
// Try with all returning empty
mClientCallbacks.getDeviceCertificateFn = getEmptyDeviceCertificateFunc;
mClientCallbacks.getSecurityTokenFn = getEmptySecurityTokenFunc;
mClientCallbacks.getDeviceFingerprintFn = getEmptyDeviceFingerprintFunc;
// Currently provisioning is unsupported so it should fail
if (!sync) {
EXPECT_EQ(STATUS_CLIENT_PROVISION_CALL_FAILED,
createKinesisVideoClient(&mDeviceInfo, &mClientCallbacks, &clientHandle));
} else {
EXPECT_EQ(STATUS_CLIENT_PROVISION_CALL_FAILED,
createKinesisVideoClientSync(&mDeviceInfo, &mClientCallbacks, &clientHandle));
}
pKinesisVideoClient = FROM_CLIENT_HANDLE(clientHandle);
EXPECT_EQ(0, pKinesisVideoClient->tokenAuthInfo.data[0]);
EXPECT_EQ(0, pKinesisVideoClient->tokenAuthInfo.expiration);
EXPECT_EQ(MAX_DEVICE_FINGERPRINT_LENGTH, STRLEN(pKinesisVideoClient->deviceFingerprint));
// Extra one as the base test has already called the function once
EXPECT_EQ(4, ATOMIC_LOAD(&mGetSecurityTokenFuncCount));
EXPECT_EQ(4, ATOMIC_LOAD(&mGetDeviceCertificateFuncCount));
EXPECT_EQ(12, ATOMIC_LOAD(&mGetDeviceFingerprintFuncCount));
mClientCallbacks.getDeviceCertificateFn = getDeviceCertificateFunc;
mClientCallbacks.getSecurityTokenFn = getSecurityTokenFunc;
mClientCallbacks.getDeviceFingerprintFn = getDeviceFingerprintFunc;
EXPECT_TRUE(STATUS_SUCCEEDED(freeKinesisVideoClient(&clientHandle)));
}