blob: 0f24fb2aac5fc4b4b1125d4f09f4e960aca04888 [file] [log] [blame]
David Anderson28dea682019-02-20 13:37:51 -08001/*
2 * Copyright (C) 2019 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.server.locksettings;
18
Pavel Grafov57f1b662019-03-27 14:55:38 +000019import android.platform.test.annotations.Presubmit;
David Anderson28dea682019-02-20 13:37:51 -080020import android.test.AndroidTestCase;
21
Pavel Grafov57f1b662019-03-27 14:55:38 +000022import androidx.test.filters.SmallTest;
Kenny Rootd01bb412019-11-22 09:34:03 -080023import androidx.test.runner.AndroidJUnit4;
24
25import org.junit.After;
26import org.junit.Before;
27import org.junit.Test;
28import org.junit.runner.RunWith;
Pavel Grafov57f1b662019-03-27 14:55:38 +000029
David Anderson28dea682019-02-20 13:37:51 -080030import java.io.ByteArrayInputStream;
31import java.io.ByteArrayOutputStream;
32import java.util.HashMap;
33import java.util.HashSet;
34import java.util.Map;
35import java.util.Set;
36
Pavel Grafov57f1b662019-03-27 14:55:38 +000037@SmallTest
38@Presubmit
Kenny Rootd01bb412019-11-22 09:34:03 -080039@RunWith(AndroidJUnit4.class)
David Anderson28dea682019-02-20 13:37:51 -080040public class PasswordSlotManagerTests extends AndroidTestCase {
41
42 PasswordSlotManagerTestable mManager;
43
Kenny Rootd01bb412019-11-22 09:34:03 -080044 @Before
45 public void setUp() throws Exception {
David Anderson28dea682019-02-20 13:37:51 -080046 mManager = new PasswordSlotManagerTestable();
47 }
48
Kenny Rootd01bb412019-11-22 09:34:03 -080049 @After
50 public void tearDown() throws Exception {
David Anderson28dea682019-02-20 13:37:51 -080051 mManager.cleanup();
52 }
53
Kenny Rootd01bb412019-11-22 09:34:03 -080054 @Test
David Anderson28dea682019-02-20 13:37:51 -080055 public void testBasicSlotUse() throws Exception {
56 mManager.markSlotInUse(0);
57 mManager.markSlotInUse(1);
58
59 Set<Integer> expected = new HashSet<Integer>();
60 expected.add(0);
61 expected.add(1);
62 assertEquals(expected, mManager.getUsedSlots());
63
64 mManager.markSlotDeleted(1);
65
66 expected = new HashSet<Integer>();
67 expected.add(0);
68 assertEquals(expected, mManager.getUsedSlots());
69 }
70
Kenny Rootd01bb412019-11-22 09:34:03 -080071 @Test
David Anderson28dea682019-02-20 13:37:51 -080072 public void testMergeSlots() throws Exception {
73 // Add some slots from a different OS image.
74 mManager.setGsiImageNumber(1);
75 mManager.markSlotInUse(4);
76 mManager.markSlotInUse(6);
77
78 // Switch back to the host image.
79 mManager.setGsiImageNumber(0);
80 mManager.markSlotInUse(0);
81 mManager.markSlotInUse(3);
82 mManager.markSlotInUse(5);
83
84 // Correct slot information for the host image.
85 Set<Integer> actual = new HashSet<Integer>();
86 actual.add(1);
87 actual.add(3);
88 mManager.refreshActiveSlots(actual);
89
90 Set<Integer> expected = new HashSet<Integer>();
91 expected.add(1);
92 expected.add(3);
93 expected.add(4);
94 expected.add(6);
95 assertEquals(expected, mManager.getUsedSlots());
96 }
97
Kenny Rootd01bb412019-11-22 09:34:03 -080098 @Test
David Anderson28dea682019-02-20 13:37:51 -080099 public void testSerialization() throws Exception {
100 mManager.markSlotInUse(0);
101 mManager.markSlotInUse(1);
102 mManager.setGsiImageNumber(1);
103 mManager.markSlotInUse(4);
104
105 final ByteArrayOutputStream saved = new ByteArrayOutputStream();
106 mManager.saveSlotMap(saved);
107
108 final HashMap<Integer, String> expected = new HashMap<Integer, String>();
109 expected.put(0, "host");
110 expected.put(1, "host");
111 expected.put(4, "gsi1");
112
113 final Map<Integer, String> map = mManager.loadSlotMap(
114 new ByteArrayInputStream(saved.toByteArray()));
115 assertEquals(expected, map);
116 }
117
Kenny Rootd01bb412019-11-22 09:34:03 -0800118 @Test
David Anderson28dea682019-02-20 13:37:51 -0800119 public void testSaving() throws Exception {
120 mManager.markSlotInUse(0);
121 mManager.markSlotInUse(1);
122 mManager.setGsiImageNumber(1);
123 mManager.markSlotInUse(4);
124
125 // Make a new one. It should load the previous map.
126 mManager = new PasswordSlotManagerTestable();
127
128 Set<Integer> expected = new HashSet<Integer>();
129 expected.add(0);
130 expected.add(1);
131 expected.add(4);
132 assertEquals(expected, mManager.getUsedSlots());
133 }
134}