Implement OEMCrypto_GetNumberOfOpenSessions

Merged from Widevine CDM repo:
https://widevine-internal-review.googlesource.com/#/c/13560/

Change-Id: Ie19bf3e57d0c4b1621b95bd5912a751ccfbaaa7b
This commit is contained in:
KongQun Yang
2015-03-11 09:37:21 -07:00
parent bd2ac27684
commit 46f26fe6ae
7 changed files with 57 additions and 10 deletions

View File

@@ -237,6 +237,8 @@ class CryptoEngine {
SessionContext* FindSession(SessionId sid);
size_t GetNumberOfOpenSessions() { return sessions_.size(); }
void set_current_session_(SessionContext* current) {
current_session_ = current;
}

View File

@@ -1024,6 +1024,16 @@ bool OEMCrypto_SupportsUsageTable() {
return supports_usage;
}
extern "C"
OEMCryptoResult OEMCrypto_GetNumberOfOpenSessions(size_t* count) {
if (LogCategoryEnabled(kLoggingTraceOEMCryptoCalls)) {
LOGI("-- OEMCryptoResult OEMCrypto_GetNumberOfOpenSessions(%p)\n", count);
}
if (count == NULL) return OEMCrypto_ERROR_UNKNOWN_FAILURE;
*count = crypto_engine->GetNumberOfOpenSessions();
return OEMCrypto_SUCCESS;
}
extern "C"
OEMCryptoResult OEMCrypto_GetMaxNumberOfSessions(size_t* maximum) {
if (LogCategoryEnabled(kLoggingTraceOEMCryptoCalls)) {

View File

@@ -1740,22 +1740,30 @@ TEST_F(OEMCryptoClientTest, TwoSessionsOpenClose) {
}
TEST_F(OEMCryptoClientTest, MaxSessionsOpenClose) {
size_t sessions_count;
ASSERT_EQ(OEMCrypto_SUCCESS,
OEMCrypto_GetNumberOfOpenSessions(&sessions_count));
ASSERT_EQ(0, sessions_count);
size_t max_sessions;
ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_GetMaxNumberOfSessions(&max_sessions));
ASSERT_GT(max_sessions, 0);
vector<Session> s(max_sessions);
for (int i = 0; i < s.size(); i++) {
s[i].open();
ASSERT_EQ(OEMCrypto_SUCCESS, s[i].getStatus());
ASSERT_TRUE(s[i].isOpen());
vector<OEMCrypto_SESSION> sessions;
for (int i = 0; i < max_sessions; i++) {
OEMCrypto_SESSION session_id;
ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_OpenSession(&session_id));
ASSERT_EQ(OEMCrypto_SUCCESS,
OEMCrypto_GetNumberOfOpenSessions(&sessions_count));
ASSERT_EQ(i + 1, sessions_count);
sessions.push_back(session_id);
}
for (int i = 0; i < s.size(); i++) {
s[i].close();
ASSERT_EQ(OEMCrypto_SUCCESS, s[i].getStatus());
ASSERT_FALSE(s[i].isOpen());
for (int i = 0; i < sessions.size(); i++) {
ASSERT_EQ(OEMCrypto_SUCCESS, OEMCrypto_CloseSession(sessions[i]));
ASSERT_EQ(OEMCrypto_SUCCESS,
OEMCrypto_GetNumberOfOpenSessions(&sessions_count));
ASSERT_EQ(sessions.size() - i - 1, sessions_count);
}
}
// TODO(kqyang): Add more tests exercising multiple sessions.
TEST_F(OEMCryptoClientTest, GenerateNonce) {
Session s;