110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu/* 210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu * Copyright (C) 2015 The Android Open Source Project 310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu * 410305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu * Licensed under the Apache License, Version 2.0 (the "License"); 510305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu * you may not use this file except in compliance with the License. 610305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu * You may obtain a copy of the License at 710305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu * 810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu * http://www.apache.org/licenses/LICENSE-2.0 910305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu * 1010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu * Unless required by applicable law or agreed to in writing, software 1110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu * distributed under the License is distributed on an "AS IS" BASIS, 1210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu * See the License for the specific language governing permissions and 1410305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu * limitations under the License. 1510305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu */ 1610305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 1710305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu//#define LOG_NDEBUG 0 1810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu#define LOG_TAG "DrmSessionManager_test" 1910305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu#include <utils/Log.h> 2010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 2110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu#include <gtest/gtest.h> 2210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 233003807fcfa96c9cbfea18d643f47108aa116cd5Jeff Tinker#include <media/Drm.h> 243003807fcfa96c9cbfea18d643f47108aa116cd5Jeff Tinker#include <media/DrmSessionClientInterface.h> 253003807fcfa96c9cbfea18d643f47108aa116cd5Jeff Tinker#include <media/DrmSessionManager.h> 2610305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu#include <media/stagefright/foundation/ADebug.h> 2714bcacaed718a506f59e8f3af66e9e0137789da6Ronghua Wu#include <media/stagefright/ProcessInfoInterface.h> 2810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 2910305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wunamespace android { 3010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 3110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wustruct FakeProcessInfo : public ProcessInfoInterface { 3210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu FakeProcessInfo() {} 3310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu virtual ~FakeProcessInfo() {} 3410305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 355c3da20ddde6d17c3ab3cff7f7ca19f4f484f812Ronghua Wu virtual bool getPriority(int pid, int* priority) { 365c3da20ddde6d17c3ab3cff7f7ca19f4f484f812Ronghua Wu // For testing, use pid as priority. 375c3da20ddde6d17c3ab3cff7f7ca19f4f484f812Ronghua Wu // Lower the value higher the priority. 385c3da20ddde6d17c3ab3cff7f7ca19f4f484f812Ronghua Wu *priority = pid; 395c3da20ddde6d17c3ab3cff7f7ca19f4f484f812Ronghua Wu return true; 405c3da20ddde6d17c3ab3cff7f7ca19f4f484f812Ronghua Wu } 4110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 42d11c43a12917e017d715db88c13e4e7550eb9151Ronghua Wu virtual bool isValidPid(int /* pid */) { 43d11c43a12917e017d715db88c13e4e7550eb9151Ronghua Wu return true; 44d11c43a12917e017d715db88c13e4e7550eb9151Ronghua Wu } 45d11c43a12917e017d715db88c13e4e7550eb9151Ronghua Wu 4610305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wuprivate: 4710305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu DISALLOW_EVIL_CONSTRUCTORS(FakeProcessInfo); 4810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu}; 4910305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 5010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wustruct FakeDrm : public DrmSessionClientInterface { 5110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu FakeDrm() {} 5210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu virtual ~FakeDrm() {} 5310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 5410305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu virtual bool reclaimSession(const Vector<uint8_t>& sessionId) { 5510305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu mReclaimedSessions.push_back(sessionId); 5610305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu return true; 5710305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu } 5810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 5910305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu const Vector<Vector<uint8_t> >& reclaimedSessions() const { 6010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu return mReclaimedSessions; 6110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu } 6210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 6310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wuprivate: 6410305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu Vector<Vector<uint8_t> > mReclaimedSessions; 6510305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 6610305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu DISALLOW_EVIL_CONSTRUCTORS(FakeDrm); 6710305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu}; 6810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 695c3da20ddde6d17c3ab3cff7f7ca19f4f484f812Ronghua Wustatic const int kTestPid1 = 30; 7010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wustatic const int kTestPid2 = 20; 7110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wustatic const uint8_t kTestSessionId1[] = {1, 2, 3}; 7210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wustatic const uint8_t kTestSessionId2[] = {4, 5, 6, 7, 8}; 7310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wustatic const uint8_t kTestSessionId3[] = {9, 0}; 7410305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 7510305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wuclass DrmSessionManagerTest : public ::testing::Test { 7610305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wupublic: 7710305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu DrmSessionManagerTest() 7810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu : mDrmSessionManager(new DrmSessionManager(new FakeProcessInfo())), 7910305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu mTestDrm1(new FakeDrm()), 8010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu mTestDrm2(new FakeDrm()) { 8110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu GetSessionId(kTestSessionId1, ARRAY_SIZE(kTestSessionId1), &mSessionId1); 8210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu GetSessionId(kTestSessionId2, ARRAY_SIZE(kTestSessionId2), &mSessionId2); 8310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu GetSessionId(kTestSessionId3, ARRAY_SIZE(kTestSessionId3), &mSessionId3); 8410305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu } 8510305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 8610305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wuprotected: 8710305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu static void GetSessionId(const uint8_t* ids, size_t num, Vector<uint8_t>* sessionId) { 8810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu for (size_t i = 0; i < num; ++i) { 8910305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu sessionId->push_back(ids[i]); 9010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu } 9110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu } 9210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 9310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu static void ExpectEqSessionInfo(const SessionInfo& info, sp<DrmSessionClientInterface> drm, 9410305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu const Vector<uint8_t>& sessionId, int64_t timeStamp) { 9510305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu EXPECT_EQ(drm, info.drm); 9610305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu EXPECT_TRUE(isEqualSessionId(sessionId, info.sessionId)); 9710305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu EXPECT_EQ(timeStamp, info.timeStamp); 9810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu } 9910305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 10010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu void addSession() { 10110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu mDrmSessionManager->addSession(kTestPid1, mTestDrm1, mSessionId1); 10210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu mDrmSessionManager->addSession(kTestPid2, mTestDrm2, mSessionId2); 10310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu mDrmSessionManager->addSession(kTestPid2, mTestDrm2, mSessionId3); 10410305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu const PidSessionInfosMap& map = sessionMap(); 1056d339f1f764bbd32e3381dae7bfa7c6c575bb493Lajos Molnar EXPECT_EQ(2u, map.size()); 10610305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu ssize_t index1 = map.indexOfKey(kTestPid1); 10710305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu ASSERT_GE(index1, 0); 10810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu const SessionInfos& infos1 = map[index1]; 1096d339f1f764bbd32e3381dae7bfa7c6c575bb493Lajos Molnar EXPECT_EQ(1u, infos1.size()); 11010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu ExpectEqSessionInfo(infos1[0], mTestDrm1, mSessionId1, 0); 11110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 11210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu ssize_t index2 = map.indexOfKey(kTestPid2); 11310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu ASSERT_GE(index2, 0); 11410305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu const SessionInfos& infos2 = map[index2]; 1156d339f1f764bbd32e3381dae7bfa7c6c575bb493Lajos Molnar EXPECT_EQ(2u, infos2.size()); 11610305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu ExpectEqSessionInfo(infos2[0], mTestDrm2, mSessionId2, 1); 11710305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu ExpectEqSessionInfo(infos2[1], mTestDrm2, mSessionId3, 2); 11810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu } 11910305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 12010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu const PidSessionInfosMap& sessionMap() { 12110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu return mDrmSessionManager->mSessionMap; 12210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu } 12310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 12410305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu void testGetLowestPriority() { 12510305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu int pid; 12610305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu int priority; 12710305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu EXPECT_FALSE(mDrmSessionManager->getLowestPriority_l(&pid, &priority)); 12810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 12910305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu addSession(); 13010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu EXPECT_TRUE(mDrmSessionManager->getLowestPriority_l(&pid, &priority)); 13110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 13210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu EXPECT_EQ(kTestPid1, pid); 13310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu FakeProcessInfo processInfo; 1345c3da20ddde6d17c3ab3cff7f7ca19f4f484f812Ronghua Wu int priority1; 1355c3da20ddde6d17c3ab3cff7f7ca19f4f484f812Ronghua Wu processInfo.getPriority(kTestPid1, &priority1); 1365c3da20ddde6d17c3ab3cff7f7ca19f4f484f812Ronghua Wu EXPECT_EQ(priority1, priority); 13710305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu } 13810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 13910305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu void testGetLeastUsedSession() { 14010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu sp<DrmSessionClientInterface> drm; 14110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu Vector<uint8_t> sessionId; 14210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu EXPECT_FALSE(mDrmSessionManager->getLeastUsedSession_l(kTestPid1, &drm, &sessionId)); 14310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 14410305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu addSession(); 14510305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 14610305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu EXPECT_TRUE(mDrmSessionManager->getLeastUsedSession_l(kTestPid1, &drm, &sessionId)); 14710305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu EXPECT_EQ(mTestDrm1, drm); 14810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu EXPECT_TRUE(isEqualSessionId(mSessionId1, sessionId)); 14910305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 15010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu EXPECT_TRUE(mDrmSessionManager->getLeastUsedSession_l(kTestPid2, &drm, &sessionId)); 15110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu EXPECT_EQ(mTestDrm2, drm); 15210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu EXPECT_TRUE(isEqualSessionId(mSessionId2, sessionId)); 15310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 15410305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu // mSessionId2 is no longer the least used session. 15510305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu mDrmSessionManager->useSession(mSessionId2); 15610305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu EXPECT_TRUE(mDrmSessionManager->getLeastUsedSession_l(kTestPid2, &drm, &sessionId)); 15710305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu EXPECT_EQ(mTestDrm2, drm); 15810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu EXPECT_TRUE(isEqualSessionId(mSessionId3, sessionId)); 15910305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu } 16010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 16110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu sp<DrmSessionManager> mDrmSessionManager; 16210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu sp<FakeDrm> mTestDrm1; 16310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu sp<FakeDrm> mTestDrm2; 16410305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu Vector<uint8_t> mSessionId1; 16510305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu Vector<uint8_t> mSessionId2; 16610305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu Vector<uint8_t> mSessionId3; 16710305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu}; 16810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 16910305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua WuTEST_F(DrmSessionManagerTest, addSession) { 17010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu addSession(); 17110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu} 17210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 17310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua WuTEST_F(DrmSessionManagerTest, useSession) { 17410305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu addSession(); 17510305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 17610305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu mDrmSessionManager->useSession(mSessionId1); 17710305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu mDrmSessionManager->useSession(mSessionId3); 17810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 17910305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu const PidSessionInfosMap& map = sessionMap(); 18010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu const SessionInfos& infos1 = map.valueFor(kTestPid1); 18110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu const SessionInfos& infos2 = map.valueFor(kTestPid2); 18210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu ExpectEqSessionInfo(infos1[0], mTestDrm1, mSessionId1, 3); 18310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu ExpectEqSessionInfo(infos2[1], mTestDrm2, mSessionId3, 4); 18410305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu} 18510305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 18610305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua WuTEST_F(DrmSessionManagerTest, removeSession) { 18710305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu addSession(); 18810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 18910305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu mDrmSessionManager->removeSession(mSessionId2); 19010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 19110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu const PidSessionInfosMap& map = sessionMap(); 1926d339f1f764bbd32e3381dae7bfa7c6c575bb493Lajos Molnar EXPECT_EQ(2u, map.size()); 19310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu const SessionInfos& infos1 = map.valueFor(kTestPid1); 19410305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu const SessionInfos& infos2 = map.valueFor(kTestPid2); 1956d339f1f764bbd32e3381dae7bfa7c6c575bb493Lajos Molnar EXPECT_EQ(1u, infos1.size()); 1966d339f1f764bbd32e3381dae7bfa7c6c575bb493Lajos Molnar EXPECT_EQ(1u, infos2.size()); 19710305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu // mSessionId2 has been removed. 19810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu ExpectEqSessionInfo(infos2[0], mTestDrm2, mSessionId3, 2); 19910305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu} 20010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 20110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua WuTEST_F(DrmSessionManagerTest, removeDrm) { 20210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu addSession(); 20310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 20410305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu sp<FakeDrm> drm = new FakeDrm; 20510305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu const uint8_t ids[] = {123}; 20610305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu Vector<uint8_t> sessionId; 20710305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu GetSessionId(ids, ARRAY_SIZE(ids), &sessionId); 20810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu mDrmSessionManager->addSession(kTestPid2, drm, sessionId); 20910305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 21010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu mDrmSessionManager->removeDrm(mTestDrm2); 21110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 21210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu const PidSessionInfosMap& map = sessionMap(); 21310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu const SessionInfos& infos2 = map.valueFor(kTestPid2); 2146d339f1f764bbd32e3381dae7bfa7c6c575bb493Lajos Molnar EXPECT_EQ(1u, infos2.size()); 21510305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu // mTestDrm2 has been removed. 21610305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu ExpectEqSessionInfo(infos2[0], drm, sessionId, 3); 21710305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu} 21810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 21910305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua WuTEST_F(DrmSessionManagerTest, reclaimSession) { 22010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu EXPECT_FALSE(mDrmSessionManager->reclaimSession(kTestPid1)); 22110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu addSession(); 22210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 22310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu // calling pid priority is too low 2245c3da20ddde6d17c3ab3cff7f7ca19f4f484f812Ronghua Wu EXPECT_FALSE(mDrmSessionManager->reclaimSession(50)); 22510305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 2265c3da20ddde6d17c3ab3cff7f7ca19f4f484f812Ronghua Wu EXPECT_TRUE(mDrmSessionManager->reclaimSession(10)); 2276d339f1f764bbd32e3381dae7bfa7c6c575bb493Lajos Molnar EXPECT_EQ(1u, mTestDrm1->reclaimedSessions().size()); 22810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu EXPECT_TRUE(isEqualSessionId(mSessionId1, mTestDrm1->reclaimedSessions()[0])); 22910305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 23010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu mDrmSessionManager->removeSession(mSessionId1); 23110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 23210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu // add a session from a higher priority process. 23310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu sp<FakeDrm> drm = new FakeDrm; 2341db71be52d989364e62971e997bea78703bf9f97Ronghua Wu const uint8_t ids[] = {1, 3, 5}; 23510305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu Vector<uint8_t> sessionId; 23610305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu GetSessionId(ids, ARRAY_SIZE(ids), &sessionId); 2375c3da20ddde6d17c3ab3cff7f7ca19f4f484f812Ronghua Wu mDrmSessionManager->addSession(15, drm, sessionId); 23810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 2395c3da20ddde6d17c3ab3cff7f7ca19f4f484f812Ronghua Wu EXPECT_TRUE(mDrmSessionManager->reclaimSession(18)); 2406d339f1f764bbd32e3381dae7bfa7c6c575bb493Lajos Molnar EXPECT_EQ(1u, mTestDrm2->reclaimedSessions().size()); 24110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu // mSessionId2 is reclaimed. 24210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu EXPECT_TRUE(isEqualSessionId(mSessionId2, mTestDrm2->reclaimedSessions()[0])); 24310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu} 24410305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 24510305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua WuTEST_F(DrmSessionManagerTest, getLowestPriority) { 24610305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu testGetLowestPriority(); 24710305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu} 24810305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 24910305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua WuTEST_F(DrmSessionManagerTest, getLeastUsedSession_l) { 25010305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu testGetLeastUsedSession(); 25110305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu} 25210305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu 25310305cc672dcb39b7cc7dc03eeafffb2fea150ecRonghua Wu} // namespace android 254