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