1a69729dc76b97c44387088d351480d5d0701517eJeff Tinker/* 2a69729dc76b97c44387088d351480d5d0701517eJeff Tinker * Copyright (C) 2015 The Android Open Source Project 3a69729dc76b97c44387088d351480d5d0701517eJeff Tinker * 4a69729dc76b97c44387088d351480d5d0701517eJeff Tinker * Licensed under the Apache License, Version 2.0 (the "License"); 5a69729dc76b97c44387088d351480d5d0701517eJeff Tinker * you may not use this file except in compliance with the License. 6a69729dc76b97c44387088d351480d5d0701517eJeff Tinker * You may obtain a copy of the License at 7a69729dc76b97c44387088d351480d5d0701517eJeff Tinker * 8a69729dc76b97c44387088d351480d5d0701517eJeff Tinker * http://www.apache.org/licenses/LICENSE-2.0 9a69729dc76b97c44387088d351480d5d0701517eJeff Tinker * 10a69729dc76b97c44387088d351480d5d0701517eJeff Tinker * Unless required by applicable law or agreed to in writing, software 11a69729dc76b97c44387088d351480d5d0701517eJeff Tinker * distributed under the License is distributed on an "AS IS" BASIS, 12a69729dc76b97c44387088d351480d5d0701517eJeff Tinker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a69729dc76b97c44387088d351480d5d0701517eJeff Tinker * See the License for the specific language governing permissions and 14a69729dc76b97c44387088d351480d5d0701517eJeff Tinker * limitations under the License. 15a69729dc76b97c44387088d351480d5d0701517eJeff Tinker */ 16a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 17a69729dc76b97c44387088d351480d5d0701517eJeff Tinker//#define LOG_NDEBUG 0 18a69729dc76b97c44387088d351480d5d0701517eJeff Tinker#define LOG_TAG "DrmSessionManager_test" 19a69729dc76b97c44387088d351480d5d0701517eJeff Tinker#include <utils/Log.h> 20a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 21a69729dc76b97c44387088d351480d5d0701517eJeff Tinker#include <gtest/gtest.h> 22a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 23a69729dc76b97c44387088d351480d5d0701517eJeff Tinker#include "Drm.h" 24a69729dc76b97c44387088d351480d5d0701517eJeff Tinker#include "DrmSessionClientInterface.h" 25a69729dc76b97c44387088d351480d5d0701517eJeff Tinker#include "DrmSessionManager.h" 26a69729dc76b97c44387088d351480d5d0701517eJeff Tinker#include <media/stagefright/foundation/ADebug.h> 27a69729dc76b97c44387088d351480d5d0701517eJeff Tinker#include <media/stagefright/ProcessInfoInterface.h> 28a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 29a69729dc76b97c44387088d351480d5d0701517eJeff Tinkernamespace android { 30a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 31a69729dc76b97c44387088d351480d5d0701517eJeff Tinkerstruct FakeProcessInfo : public ProcessInfoInterface { 32a69729dc76b97c44387088d351480d5d0701517eJeff Tinker FakeProcessInfo() {} 33a69729dc76b97c44387088d351480d5d0701517eJeff Tinker virtual ~FakeProcessInfo() {} 34a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 35a69729dc76b97c44387088d351480d5d0701517eJeff Tinker virtual bool getPriority(int pid, int* priority) { 36a69729dc76b97c44387088d351480d5d0701517eJeff Tinker // For testing, use pid as priority. 37a69729dc76b97c44387088d351480d5d0701517eJeff Tinker // Lower the value higher the priority. 38a69729dc76b97c44387088d351480d5d0701517eJeff Tinker *priority = pid; 39a69729dc76b97c44387088d351480d5d0701517eJeff Tinker return true; 40a69729dc76b97c44387088d351480d5d0701517eJeff Tinker } 41a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 42a69729dc76b97c44387088d351480d5d0701517eJeff Tinkerprivate: 43a69729dc76b97c44387088d351480d5d0701517eJeff Tinker DISALLOW_EVIL_CONSTRUCTORS(FakeProcessInfo); 44a69729dc76b97c44387088d351480d5d0701517eJeff Tinker}; 45a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 46a69729dc76b97c44387088d351480d5d0701517eJeff Tinkerstruct FakeDrm : public DrmSessionClientInterface { 47a69729dc76b97c44387088d351480d5d0701517eJeff Tinker FakeDrm() {} 48a69729dc76b97c44387088d351480d5d0701517eJeff Tinker virtual ~FakeDrm() {} 49a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 50a69729dc76b97c44387088d351480d5d0701517eJeff Tinker virtual bool reclaimSession(const Vector<uint8_t>& sessionId) { 51a69729dc76b97c44387088d351480d5d0701517eJeff Tinker mReclaimedSessions.push_back(sessionId); 52a69729dc76b97c44387088d351480d5d0701517eJeff Tinker return true; 53a69729dc76b97c44387088d351480d5d0701517eJeff Tinker } 54a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 55a69729dc76b97c44387088d351480d5d0701517eJeff Tinker const Vector<Vector<uint8_t> >& reclaimedSessions() const { 56a69729dc76b97c44387088d351480d5d0701517eJeff Tinker return mReclaimedSessions; 57a69729dc76b97c44387088d351480d5d0701517eJeff Tinker } 58a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 59a69729dc76b97c44387088d351480d5d0701517eJeff Tinkerprivate: 60a69729dc76b97c44387088d351480d5d0701517eJeff Tinker Vector<Vector<uint8_t> > mReclaimedSessions; 61a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 62a69729dc76b97c44387088d351480d5d0701517eJeff Tinker DISALLOW_EVIL_CONSTRUCTORS(FakeDrm); 63a69729dc76b97c44387088d351480d5d0701517eJeff Tinker}; 64a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 65a69729dc76b97c44387088d351480d5d0701517eJeff Tinkerstatic const int kTestPid1 = 30; 66a69729dc76b97c44387088d351480d5d0701517eJeff Tinkerstatic const int kTestPid2 = 20; 67a69729dc76b97c44387088d351480d5d0701517eJeff Tinkerstatic const uint8_t kTestSessionId1[] = {1, 2, 3}; 68a69729dc76b97c44387088d351480d5d0701517eJeff Tinkerstatic const uint8_t kTestSessionId2[] = {4, 5, 6, 7, 8}; 69a69729dc76b97c44387088d351480d5d0701517eJeff Tinkerstatic const uint8_t kTestSessionId3[] = {9, 0}; 70a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 71a69729dc76b97c44387088d351480d5d0701517eJeff Tinkerclass DrmSessionManagerTest : public ::testing::Test { 72a69729dc76b97c44387088d351480d5d0701517eJeff Tinkerpublic: 73a69729dc76b97c44387088d351480d5d0701517eJeff Tinker DrmSessionManagerTest() 74a69729dc76b97c44387088d351480d5d0701517eJeff Tinker : mDrmSessionManager(new DrmSessionManager(new FakeProcessInfo())), 75a69729dc76b97c44387088d351480d5d0701517eJeff Tinker mTestDrm1(new FakeDrm()), 76a69729dc76b97c44387088d351480d5d0701517eJeff Tinker mTestDrm2(new FakeDrm()) { 77a69729dc76b97c44387088d351480d5d0701517eJeff Tinker GetSessionId(kTestSessionId1, ARRAY_SIZE(kTestSessionId1), &mSessionId1); 78a69729dc76b97c44387088d351480d5d0701517eJeff Tinker GetSessionId(kTestSessionId2, ARRAY_SIZE(kTestSessionId2), &mSessionId2); 79a69729dc76b97c44387088d351480d5d0701517eJeff Tinker GetSessionId(kTestSessionId3, ARRAY_SIZE(kTestSessionId3), &mSessionId3); 80a69729dc76b97c44387088d351480d5d0701517eJeff Tinker } 81a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 82a69729dc76b97c44387088d351480d5d0701517eJeff Tinkerprotected: 83a69729dc76b97c44387088d351480d5d0701517eJeff Tinker static void GetSessionId(const uint8_t* ids, size_t num, Vector<uint8_t>* sessionId) { 84a69729dc76b97c44387088d351480d5d0701517eJeff Tinker for (size_t i = 0; i < num; ++i) { 85a69729dc76b97c44387088d351480d5d0701517eJeff Tinker sessionId->push_back(ids[i]); 86a69729dc76b97c44387088d351480d5d0701517eJeff Tinker } 87a69729dc76b97c44387088d351480d5d0701517eJeff Tinker } 88a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 89a69729dc76b97c44387088d351480d5d0701517eJeff Tinker static void ExpectEqSessionInfo(const SessionInfo& info, sp<DrmSessionClientInterface> drm, 90a69729dc76b97c44387088d351480d5d0701517eJeff Tinker const Vector<uint8_t>& sessionId, int64_t timeStamp) { 91a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_EQ(drm, info.drm); 92a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_TRUE(isEqualSessionId(sessionId, info.sessionId)); 93a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_EQ(timeStamp, info.timeStamp); 94a69729dc76b97c44387088d351480d5d0701517eJeff Tinker } 95a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 96a69729dc76b97c44387088d351480d5d0701517eJeff Tinker void addSession() { 97a69729dc76b97c44387088d351480d5d0701517eJeff Tinker mDrmSessionManager->addSession(kTestPid1, mTestDrm1, mSessionId1); 98a69729dc76b97c44387088d351480d5d0701517eJeff Tinker mDrmSessionManager->addSession(kTestPid2, mTestDrm2, mSessionId2); 99a69729dc76b97c44387088d351480d5d0701517eJeff Tinker mDrmSessionManager->addSession(kTestPid2, mTestDrm2, mSessionId3); 100a69729dc76b97c44387088d351480d5d0701517eJeff Tinker const PidSessionInfosMap& map = sessionMap(); 101a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_EQ(2u, map.size()); 102a69729dc76b97c44387088d351480d5d0701517eJeff Tinker ssize_t index1 = map.indexOfKey(kTestPid1); 103a69729dc76b97c44387088d351480d5d0701517eJeff Tinker ASSERT_GE(index1, 0); 104a69729dc76b97c44387088d351480d5d0701517eJeff Tinker const SessionInfos& infos1 = map[index1]; 105a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_EQ(1u, infos1.size()); 106a69729dc76b97c44387088d351480d5d0701517eJeff Tinker ExpectEqSessionInfo(infos1[0], mTestDrm1, mSessionId1, 0); 107a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 108a69729dc76b97c44387088d351480d5d0701517eJeff Tinker ssize_t index2 = map.indexOfKey(kTestPid2); 109a69729dc76b97c44387088d351480d5d0701517eJeff Tinker ASSERT_GE(index2, 0); 110a69729dc76b97c44387088d351480d5d0701517eJeff Tinker const SessionInfos& infos2 = map[index2]; 111a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_EQ(2u, infos2.size()); 112a69729dc76b97c44387088d351480d5d0701517eJeff Tinker ExpectEqSessionInfo(infos2[0], mTestDrm2, mSessionId2, 1); 113a69729dc76b97c44387088d351480d5d0701517eJeff Tinker ExpectEqSessionInfo(infos2[1], mTestDrm2, mSessionId3, 2); 114a69729dc76b97c44387088d351480d5d0701517eJeff Tinker } 115a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 116a69729dc76b97c44387088d351480d5d0701517eJeff Tinker const PidSessionInfosMap& sessionMap() { 117a69729dc76b97c44387088d351480d5d0701517eJeff Tinker return mDrmSessionManager->mSessionMap; 118a69729dc76b97c44387088d351480d5d0701517eJeff Tinker } 119a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 120a69729dc76b97c44387088d351480d5d0701517eJeff Tinker void testGetLowestPriority() { 121a69729dc76b97c44387088d351480d5d0701517eJeff Tinker int pid; 122a69729dc76b97c44387088d351480d5d0701517eJeff Tinker int priority; 123a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_FALSE(mDrmSessionManager->getLowestPriority_l(&pid, &priority)); 124a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 125a69729dc76b97c44387088d351480d5d0701517eJeff Tinker addSession(); 126a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_TRUE(mDrmSessionManager->getLowestPriority_l(&pid, &priority)); 127a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 128a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_EQ(kTestPid1, pid); 129a69729dc76b97c44387088d351480d5d0701517eJeff Tinker FakeProcessInfo processInfo; 130a69729dc76b97c44387088d351480d5d0701517eJeff Tinker int priority1; 131a69729dc76b97c44387088d351480d5d0701517eJeff Tinker processInfo.getPriority(kTestPid1, &priority1); 132a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_EQ(priority1, priority); 133a69729dc76b97c44387088d351480d5d0701517eJeff Tinker } 134a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 135a69729dc76b97c44387088d351480d5d0701517eJeff Tinker void testGetLeastUsedSession() { 136a69729dc76b97c44387088d351480d5d0701517eJeff Tinker sp<DrmSessionClientInterface> drm; 137a69729dc76b97c44387088d351480d5d0701517eJeff Tinker Vector<uint8_t> sessionId; 138a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_FALSE(mDrmSessionManager->getLeastUsedSession_l(kTestPid1, &drm, &sessionId)); 139a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 140a69729dc76b97c44387088d351480d5d0701517eJeff Tinker addSession(); 141a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 142a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_TRUE(mDrmSessionManager->getLeastUsedSession_l(kTestPid1, &drm, &sessionId)); 143a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_EQ(mTestDrm1, drm); 144a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_TRUE(isEqualSessionId(mSessionId1, sessionId)); 145a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 146a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_TRUE(mDrmSessionManager->getLeastUsedSession_l(kTestPid2, &drm, &sessionId)); 147a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_EQ(mTestDrm2, drm); 148a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_TRUE(isEqualSessionId(mSessionId2, sessionId)); 149a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 150a69729dc76b97c44387088d351480d5d0701517eJeff Tinker // mSessionId2 is no longer the least used session. 151a69729dc76b97c44387088d351480d5d0701517eJeff Tinker mDrmSessionManager->useSession(mSessionId2); 152a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_TRUE(mDrmSessionManager->getLeastUsedSession_l(kTestPid2, &drm, &sessionId)); 153a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_EQ(mTestDrm2, drm); 154a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_TRUE(isEqualSessionId(mSessionId3, sessionId)); 155a69729dc76b97c44387088d351480d5d0701517eJeff Tinker } 156a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 157a69729dc76b97c44387088d351480d5d0701517eJeff Tinker sp<DrmSessionManager> mDrmSessionManager; 158a69729dc76b97c44387088d351480d5d0701517eJeff Tinker sp<FakeDrm> mTestDrm1; 159a69729dc76b97c44387088d351480d5d0701517eJeff Tinker sp<FakeDrm> mTestDrm2; 160a69729dc76b97c44387088d351480d5d0701517eJeff Tinker Vector<uint8_t> mSessionId1; 161a69729dc76b97c44387088d351480d5d0701517eJeff Tinker Vector<uint8_t> mSessionId2; 162a69729dc76b97c44387088d351480d5d0701517eJeff Tinker Vector<uint8_t> mSessionId3; 163a69729dc76b97c44387088d351480d5d0701517eJeff Tinker}; 164a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 165a69729dc76b97c44387088d351480d5d0701517eJeff TinkerTEST_F(DrmSessionManagerTest, addSession) { 166a69729dc76b97c44387088d351480d5d0701517eJeff Tinker addSession(); 167a69729dc76b97c44387088d351480d5d0701517eJeff Tinker} 168a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 169a69729dc76b97c44387088d351480d5d0701517eJeff TinkerTEST_F(DrmSessionManagerTest, useSession) { 170a69729dc76b97c44387088d351480d5d0701517eJeff Tinker addSession(); 171a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 172a69729dc76b97c44387088d351480d5d0701517eJeff Tinker mDrmSessionManager->useSession(mSessionId1); 173a69729dc76b97c44387088d351480d5d0701517eJeff Tinker mDrmSessionManager->useSession(mSessionId3); 174a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 175a69729dc76b97c44387088d351480d5d0701517eJeff Tinker const PidSessionInfosMap& map = sessionMap(); 176a69729dc76b97c44387088d351480d5d0701517eJeff Tinker const SessionInfos& infos1 = map.valueFor(kTestPid1); 177a69729dc76b97c44387088d351480d5d0701517eJeff Tinker const SessionInfos& infos2 = map.valueFor(kTestPid2); 178a69729dc76b97c44387088d351480d5d0701517eJeff Tinker ExpectEqSessionInfo(infos1[0], mTestDrm1, mSessionId1, 3); 179a69729dc76b97c44387088d351480d5d0701517eJeff Tinker ExpectEqSessionInfo(infos2[1], mTestDrm2, mSessionId3, 4); 180a69729dc76b97c44387088d351480d5d0701517eJeff Tinker} 181a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 182a69729dc76b97c44387088d351480d5d0701517eJeff TinkerTEST_F(DrmSessionManagerTest, removeSession) { 183a69729dc76b97c44387088d351480d5d0701517eJeff Tinker addSession(); 184a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 185a69729dc76b97c44387088d351480d5d0701517eJeff Tinker mDrmSessionManager->removeSession(mSessionId2); 186a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 187a69729dc76b97c44387088d351480d5d0701517eJeff Tinker const PidSessionInfosMap& map = sessionMap(); 188a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_EQ(2u, map.size()); 189a69729dc76b97c44387088d351480d5d0701517eJeff Tinker const SessionInfos& infos1 = map.valueFor(kTestPid1); 190a69729dc76b97c44387088d351480d5d0701517eJeff Tinker const SessionInfos& infos2 = map.valueFor(kTestPid2); 191a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_EQ(1u, infos1.size()); 192a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_EQ(1u, infos2.size()); 193a69729dc76b97c44387088d351480d5d0701517eJeff Tinker // mSessionId2 has been removed. 194a69729dc76b97c44387088d351480d5d0701517eJeff Tinker ExpectEqSessionInfo(infos2[0], mTestDrm2, mSessionId3, 2); 195a69729dc76b97c44387088d351480d5d0701517eJeff Tinker} 196a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 197a69729dc76b97c44387088d351480d5d0701517eJeff TinkerTEST_F(DrmSessionManagerTest, removeDrm) { 198a69729dc76b97c44387088d351480d5d0701517eJeff Tinker addSession(); 199a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 200a69729dc76b97c44387088d351480d5d0701517eJeff Tinker sp<FakeDrm> drm = new FakeDrm; 201a69729dc76b97c44387088d351480d5d0701517eJeff Tinker const uint8_t ids[] = {123}; 202a69729dc76b97c44387088d351480d5d0701517eJeff Tinker Vector<uint8_t> sessionId; 203a69729dc76b97c44387088d351480d5d0701517eJeff Tinker GetSessionId(ids, ARRAY_SIZE(ids), &sessionId); 204a69729dc76b97c44387088d351480d5d0701517eJeff Tinker mDrmSessionManager->addSession(kTestPid2, drm, sessionId); 205a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 206a69729dc76b97c44387088d351480d5d0701517eJeff Tinker mDrmSessionManager->removeDrm(mTestDrm2); 207a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 208a69729dc76b97c44387088d351480d5d0701517eJeff Tinker const PidSessionInfosMap& map = sessionMap(); 209a69729dc76b97c44387088d351480d5d0701517eJeff Tinker const SessionInfos& infos2 = map.valueFor(kTestPid2); 210a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_EQ(1u, infos2.size()); 211a69729dc76b97c44387088d351480d5d0701517eJeff Tinker // mTestDrm2 has been removed. 212a69729dc76b97c44387088d351480d5d0701517eJeff Tinker ExpectEqSessionInfo(infos2[0], drm, sessionId, 3); 213a69729dc76b97c44387088d351480d5d0701517eJeff Tinker} 214a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 215a69729dc76b97c44387088d351480d5d0701517eJeff TinkerTEST_F(DrmSessionManagerTest, reclaimSession) { 216a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_FALSE(mDrmSessionManager->reclaimSession(kTestPid1)); 217a69729dc76b97c44387088d351480d5d0701517eJeff Tinker addSession(); 218a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 219a69729dc76b97c44387088d351480d5d0701517eJeff Tinker // calling pid priority is too low 220a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_FALSE(mDrmSessionManager->reclaimSession(50)); 221a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 222a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_TRUE(mDrmSessionManager->reclaimSession(10)); 223a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_EQ(1u, mTestDrm1->reclaimedSessions().size()); 224a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_TRUE(isEqualSessionId(mSessionId1, mTestDrm1->reclaimedSessions()[0])); 225a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 226a69729dc76b97c44387088d351480d5d0701517eJeff Tinker mDrmSessionManager->removeSession(mSessionId1); 227a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 228a69729dc76b97c44387088d351480d5d0701517eJeff Tinker // add a session from a higher priority process. 229a69729dc76b97c44387088d351480d5d0701517eJeff Tinker sp<FakeDrm> drm = new FakeDrm; 230a69729dc76b97c44387088d351480d5d0701517eJeff Tinker const uint8_t ids[] = {1, 3, 5}; 231a69729dc76b97c44387088d351480d5d0701517eJeff Tinker Vector<uint8_t> sessionId; 232a69729dc76b97c44387088d351480d5d0701517eJeff Tinker GetSessionId(ids, ARRAY_SIZE(ids), &sessionId); 233a69729dc76b97c44387088d351480d5d0701517eJeff Tinker mDrmSessionManager->addSession(15, drm, sessionId); 234a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 235a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_TRUE(mDrmSessionManager->reclaimSession(18)); 236a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_EQ(1u, mTestDrm2->reclaimedSessions().size()); 237a69729dc76b97c44387088d351480d5d0701517eJeff Tinker // mSessionId2 is reclaimed. 238a69729dc76b97c44387088d351480d5d0701517eJeff Tinker EXPECT_TRUE(isEqualSessionId(mSessionId2, mTestDrm2->reclaimedSessions()[0])); 239a69729dc76b97c44387088d351480d5d0701517eJeff Tinker} 240a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 241a69729dc76b97c44387088d351480d5d0701517eJeff TinkerTEST_F(DrmSessionManagerTest, getLowestPriority) { 242a69729dc76b97c44387088d351480d5d0701517eJeff Tinker testGetLowestPriority(); 243a69729dc76b97c44387088d351480d5d0701517eJeff Tinker} 244a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 245a69729dc76b97c44387088d351480d5d0701517eJeff TinkerTEST_F(DrmSessionManagerTest, getLeastUsedSession_l) { 246a69729dc76b97c44387088d351480d5d0701517eJeff Tinker testGetLeastUsedSession(); 247a69729dc76b97c44387088d351480d5d0701517eJeff Tinker} 248a69729dc76b97c44387088d351480d5d0701517eJeff Tinker 249a69729dc76b97c44387088d351480d5d0701517eJeff Tinker} // namespace android 250