• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 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 
17 package com.android.server.app;
18 
19 import static org.hamcrest.CoreMatchers.is;
20 import static org.junit.Assert.assertThat;
21 
22 import android.content.Context;
23 import android.platform.test.annotations.Presubmit;
24 import android.util.AtomicFile;
25 import android.util.Log;
26 
27 import androidx.test.InstrumentationRegistry;
28 import androidx.test.filters.SmallTest;
29 import androidx.test.runner.AndroidJUnit4;
30 
31 import org.junit.After;
32 import org.junit.Test;
33 import org.junit.runner.RunWith;
34 
35 import java.io.File;
36 import java.io.FileOutputStream;
37 import java.io.IOException;
38 
39 @RunWith(AndroidJUnit4.class)
40 @SmallTest
41 @Presubmit
42 public class GameManagerServiceSettingsTests {
43 
44     private static final String TAG = "GameServiceSettingsTests";
45     private static final String PACKAGE_NAME_1 = "com.android.app1";
46     private static final String PACKAGE_NAME_2 = "com.android.app2";
47     private static final String PACKAGE_NAME_3 = "com.android.app3";
48 
writeFile(File file, byte[] data)49     private void writeFile(File file, byte[] data) {
50         file.mkdirs();
51         try {
52             AtomicFile aFile = new AtomicFile(file);
53             FileOutputStream fos = aFile.startWrite();
54             fos.write(data);
55             aFile.finishWrite(fos);
56         } catch (IOException ioe) {
57             Log.e(TAG, "Cannot write file " + file.getPath());
58         }
59     }
60 
writeGameServiceXml()61     private void writeGameServiceXml() {
62         writeFile(new File(InstrumentationRegistry.getContext().getFilesDir(),
63                         "system/game-manager-service.xml"),
64                 ("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>"
65                         + "<packages>\n"
66                         + "  <package name=\"com.android.app1\" gameMode=\"1\">\n"
67                         + "  </package>\n"
68                         + "  <package name=\"com.android.app2\" gameMode=\"2\">\n"
69                         + "  </package>\n"
70                         + "  <package name=\"com.android.app3\" gameMode=\"3\">\n"
71                         + "  </package>\n"
72                         + "</packages>\n").getBytes());
73     }
74 
deleteSystemFolder()75     private void deleteSystemFolder() {
76         File systemFolder = new File(InstrumentationRegistry.getContext().getFilesDir(), "system");
77         deleteFolder(systemFolder);
78     }
79 
deleteFolder(File folder)80     private static void deleteFolder(File folder) {
81         File[] files = folder.listFiles();
82         if (files != null) {
83             for (File file : files) {
84                 deleteFolder(file);
85             }
86         }
87         folder.delete();
88     }
89 
writeOldFiles()90     private void writeOldFiles() {
91         deleteSystemFolder();
92         writeGameServiceXml();
93     }
94 
verifyGameServiceSettingsData(GameManagerSettings settings)95     private void verifyGameServiceSettingsData(GameManagerSettings settings) {
96         assertThat(settings.getGameModeLocked(PACKAGE_NAME_1), is(1));
97         assertThat(settings.getGameModeLocked(PACKAGE_NAME_2), is(2));
98         assertThat(settings.getGameModeLocked(PACKAGE_NAME_3), is(3));
99     }
100 
101     @After
tearDown()102     public void tearDown() throws Exception {
103         deleteFolder(InstrumentationRegistry.getTargetContext().getFilesDir());
104     }
105 
106     /** read in data and verify */
107     @Test
testReadGameServiceSettings()108     public void testReadGameServiceSettings() {
109         /* write out files and read */
110         writeOldFiles();
111         final Context context = InstrumentationRegistry.getContext();
112         GameManagerSettings settings = new GameManagerSettings(context.getFilesDir());
113         assertThat(settings.readPersistentDataLocked(), is(true));
114         verifyGameServiceSettingsData(settings);
115     }
116 
117     /** read in data, write it out, and read it back in.  Verify same. */
118     @Test
testWriteGameServiceSettings()119     public void testWriteGameServiceSettings() {
120         // write out files and read
121         writeOldFiles();
122         final Context context = InstrumentationRegistry.getContext();
123         GameManagerSettings settings = new GameManagerSettings(context.getFilesDir());
124         assertThat(settings.readPersistentDataLocked(), is(true));
125 
126         // write out, read back in and verify the same
127         settings.writePersistentDataLocked();
128         assertThat(settings.readPersistentDataLocked(), is(true));
129         verifyGameServiceSettingsData(settings);
130     }
131 }
132