1 /* 2 * Copyright (C) 2012 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.sdkstats; 18 19 import java.util.HashMap; 20 import java.util.Map; 21 22 import junit.framework.TestCase; 23 24 public class SdkStatsServiceTest extends TestCase { 25 26 private static class MockSdkStatsService extends SdkStatsService { 27 28 private final String mOsName; 29 private final String mOsVersion; 30 private final String mOsArch; 31 private final String mJavaVersion; 32 private final Map<String, String> mEnvVars = new HashMap<String, String>(); 33 MockSdkStatsService(String osName, String osVersion, String osArch, String javaVersion)34 public MockSdkStatsService(String osName, 35 String osVersion, 36 String osArch, 37 String javaVersion) { 38 mOsName = osName; 39 mOsVersion = osVersion; 40 mOsArch = osArch; 41 mJavaVersion = javaVersion; 42 } 43 setSystemEnv(String varName, String value)44 public void setSystemEnv(String varName, String value) { 45 mEnvVars.put(varName, value); 46 } 47 48 @Override getSystemProperty(String name)49 protected String getSystemProperty(String name) { 50 if (SdkStatsService.SYS_PROP_OS_NAME.equals(name)) { 51 return mOsName; 52 } else if (SdkStatsService.SYS_PROP_OS_VERSION.equals(name)) { 53 return mOsVersion; 54 } else if (SdkStatsService.SYS_PROP_OS_ARCH.equals(name)) { 55 return mOsArch; 56 } else if (SdkStatsService.SYS_PROP_JAVA_VERSION.equals(name)) { 57 return mJavaVersion; 58 } 59 // Don't use current properties values, we don't want the tests to be flaky 60 fail("SdkStatsServiceTest doesn't define a system.property for " + name); 61 return null; 62 } 63 64 @Override getSystemEnv(String name)65 protected String getSystemEnv(String name) { 66 if (mEnvVars.containsKey(name)) { 67 return mEnvVars.get(name); 68 } 69 // Don't use current env vars, we don't want the tests to be flaky 70 fail("SdkStatsServiceTest doesn't define a system.getenv for " + name); 71 return null; 72 } 73 74 } 75 76 @Override setUp()77 protected void setUp() throws Exception { 78 super.setUp(); 79 } 80 81 @Override tearDown()82 protected void tearDown() throws Exception { 83 super.tearDown(); 84 } 85 testSdkStatsService_getJvmArch()86 public void testSdkStatsService_getJvmArch() { 87 MockSdkStatsService m; 88 89 m = new MockSdkStatsService("Windows", "4.0", "x86", "1.7"); 90 assertEquals("x86", m.getJvmArch()); 91 m = new MockSdkStatsService("Windows", "4.0", "i386", "1.7"); 92 assertEquals("x86", m.getJvmArch()); 93 m = new MockSdkStatsService("Windows", "4.0", "i486", "1.7"); 94 assertEquals("x86", m.getJvmArch()); 95 m = new MockSdkStatsService("Linux", "4.0", "i486-linux", "1.7"); 96 assertEquals("x86", m.getJvmArch()); 97 m = new MockSdkStatsService("Windows", "4.0", "i586", "1.7"); 98 assertEquals("x86", m.getJvmArch()); 99 m = new MockSdkStatsService("Windows", "4.0", "i686", "1.7"); 100 assertEquals("x86", m.getJvmArch()); 101 102 m = new MockSdkStatsService("Mac OS", "10.0", "x86_64", "1.7"); 103 assertEquals("x86_64", m.getJvmArch()); 104 m = new MockSdkStatsService("Mac OS", "8.0", "PowerPC", "1.7"); 105 assertEquals("ppc", m.getJvmArch()); 106 107 m = new MockSdkStatsService("Mac OS", "4.0", "x86_64", "1.7"); 108 assertEquals("x86_64", m.getJvmArch()); 109 m = new MockSdkStatsService("Windows", "4.0", "ia64", "1.7"); 110 assertEquals("x86_64", m.getJvmArch()); 111 m = new MockSdkStatsService("Windows", "4.0", "amd64", "1.7"); 112 assertEquals("x86_64", m.getJvmArch()); 113 114 m = new MockSdkStatsService("Windows", "4.0", "atom", "1.7"); 115 assertEquals("atom", m.getJvmArch()); 116 117 // 32 chars max 118 m = new MockSdkStatsService("Windows", "4.0", 119 "one3456789ten3456789twenty6789thirty6789", "1.7"); 120 assertEquals("one3456789ten3456789twenty6789th", m.getJvmArch()); 121 122 m = new MockSdkStatsService("Windows", "4.0", "", "1.7"); 123 assertEquals("unknown", m.getJvmArch()); 124 125 m = new MockSdkStatsService("Windows", "4.0", null, "1.7"); 126 assertEquals("unknown", m.getJvmArch()); 127 } 128 testSdkStatsService_getJvmVersion()129 public void testSdkStatsService_getJvmVersion() { 130 MockSdkStatsService m; 131 132 m = new MockSdkStatsService("Windows", "4.0", "x86", "1.7.8_09"); 133 assertEquals("1.7", m.getJvmVersion()); 134 135 m = new MockSdkStatsService("Windows", "4.0", "x86", ""); 136 assertEquals("unknown", m.getJvmVersion()); 137 138 m = new MockSdkStatsService("Windows", "4.0", "x86", null); 139 assertEquals("unknown", m.getJvmVersion()); 140 141 // 8 chars max 142 m = new MockSdkStatsService("Windows", "4.0", "x86", 143 "one3456789ten3456789twenty6789thirty6789"); 144 assertEquals("one34567", m.getJvmVersion()); 145 } 146 testSdkStatsService_getJvmInfo()147 public void testSdkStatsService_getJvmInfo() { 148 MockSdkStatsService m; 149 150 m = new MockSdkStatsService("Windows", "4.0", "x86", "1.7.8_09"); 151 assertEquals("1.7-x86", m.getJvmInfo()); 152 153 m = new MockSdkStatsService("Windows", "4.0", "amd64", "1.7.8_09"); 154 assertEquals("1.7-x86_64", m.getJvmInfo()); 155 156 m = new MockSdkStatsService("Windows", "4.0", "", ""); 157 assertEquals("unknown-unknown", m.getJvmInfo()); 158 159 m = new MockSdkStatsService("Windows", "4.0", null, null); 160 assertEquals("unknown-unknown", m.getJvmInfo()); 161 162 // 8+32 chars max 163 m = new MockSdkStatsService("Windows", "4.0", 164 "one3456789ten3456789twenty6789thirty6789", 165 "one3456789ten3456789twenty6789thirty6789"); 166 assertEquals("one34567-one3456789ten3456789twenty6789th", m.getJvmInfo()); 167 } 168 testSdkStatsService_getOsVersion()169 public void testSdkStatsService_getOsVersion() { 170 MockSdkStatsService m; 171 172 m = new MockSdkStatsService("Windows", "4.0.32", "x86", "1.7.8_09"); 173 assertEquals("4.0", m.getOsVersion()); 174 175 m = new MockSdkStatsService("Windows", "4.0", "x86", "1.7.8_09"); 176 assertEquals("4.0", m.getOsVersion()); 177 178 m = new MockSdkStatsService("Windows", "4", "x86", "1.7.8_09"); 179 assertEquals(null, m.getOsVersion()); 180 181 m = new MockSdkStatsService("Windows", "4.0;extrainfo", "x86", "1.7.8_09"); 182 assertEquals("4.0", m.getOsVersion()); 183 184 m = new MockSdkStatsService("Mac OS", "10.8.32", "x86_64", "1.7.8_09"); 185 assertEquals("10.8", m.getOsVersion()); 186 187 m = new MockSdkStatsService("Mac OS", "10.8", "x86_64", "1.7.8_09"); 188 assertEquals("10.8", m.getOsVersion()); 189 190 m = new MockSdkStatsService("Other", "", "x86_64", "1.7.8_09"); 191 assertEquals(null, m.getOsVersion()); 192 193 m = new MockSdkStatsService("Other", null, "x86_64", "1.7.8_09"); 194 assertEquals(null, m.getOsVersion()); 195 } 196 testSdkStatsService_getOsArch()197 public void testSdkStatsService_getOsArch() { 198 MockSdkStatsService m; 199 200 // 64 bit jvm 201 m = new MockSdkStatsService("Mac OS", "10.8.32", "x86_64", "1.7.8_09"); 202 assertEquals("x86_64", m.getOsArch()); 203 204 m = new MockSdkStatsService("Windows", "8.32", "x86_64", "1.7.8_09"); 205 assertEquals("x86_64", m.getOsArch()); 206 207 m = new MockSdkStatsService("Linux", "8.32", "x86_64", "1.7.8_09"); 208 assertEquals("x86_64", m.getOsArch()); 209 210 // 32 bit jvm with 32 vs 64 bit os 211 m = new MockSdkStatsService("Windows", "8.32", "x86", "1.7.8_09"); 212 m.setSystemEnv("PROCESSOR_ARCHITEW6432", null); 213 assertEquals("x86", m.getOsArch()); 214 215 m = new MockSdkStatsService("Windows", "8.32", "x86", "1.7.8_09"); 216 m.setSystemEnv("PROCESSOR_ARCHITEW6432", "AMD64"); 217 assertEquals("x86_64", m.getOsArch()); 218 219 m = new MockSdkStatsService("Windows", "8.32", "x86", "1.7.8_09"); 220 m.setSystemEnv("PROCESSOR_ARCHITEW6432", "IA64"); 221 assertEquals("x86_64", m.getOsArch()); 222 223 // 32 bit jvm with 32 vs 64 bit os 224 m = new MockSdkStatsService("Linux", "8.32", "x86", "1.7.8_09"); 225 m.setSystemEnv("HOSTTYPE", null); 226 assertEquals("x86", m.getOsArch()); 227 228 m = new MockSdkStatsService("Linux", "8.32", "x86", "1.7.8_09"); 229 m.setSystemEnv("HOSTTYPE", "i686-linux"); 230 assertEquals("x86", m.getOsArch()); 231 232 m = new MockSdkStatsService("Linux", "8.32", "x86", "1.7.8_09"); 233 m.setSystemEnv("HOSTTYPE", "AMD64"); 234 assertEquals("x86_64", m.getOsArch()); 235 236 m = new MockSdkStatsService("Linux", "8.32", "x86", "1.7.8_09"); 237 m.setSystemEnv("HOSTTYPE", "x86_64"); 238 assertEquals("x86_64", m.getOsArch()); 239 } 240 testSdkStatsService_getOsName()241 public void testSdkStatsService_getOsName() { 242 MockSdkStatsService m; 243 244 m = new MockSdkStatsService("Mac OS", "10.8.32", "x86_64", "1.7.8_09"); 245 assertEquals("mac-10.8", m.getOsName()); 246 247 m = new MockSdkStatsService("mac", "10", "x86", "1.7.8_09"); 248 assertEquals("mac", m.getOsName()); 249 250 m = new MockSdkStatsService("Windows", "6.2", "x86_64", "1.7.8_09"); 251 assertEquals("win-6.2", m.getOsName()); 252 253 m = new MockSdkStatsService("win", "6.2", "x86", "1.7.8_09"); 254 assertEquals("win-6.2", m.getOsName()); 255 256 m = new MockSdkStatsService("win", "6", "x86_64", "1.7.8_09"); 257 assertEquals("win", m.getOsName()); 258 259 m = new MockSdkStatsService("Linux", "foobuntu-32", "x86", "1.7.8_09"); 260 assertEquals("linux", m.getOsName()); 261 262 m = new MockSdkStatsService("linux", "1", "x86_64", "1.7.8_09"); 263 assertEquals("linux", m.getOsName()); 264 265 m = new MockSdkStatsService("PowerPC", "32", "ppc", "1.7.8_09"); 266 assertEquals("PowerPC", m.getOsName()); 267 268 m = new MockSdkStatsService("freebsd", "42", "x86_64", "1.7.8_09"); 269 assertEquals("freebsd", m.getOsName()); 270 271 m = new MockSdkStatsService("openbsd", "43", "x86_64", "1.7.8_09"); 272 assertEquals("openbsd", m.getOsName()); 273 274 // 32 chars max 275 m = new MockSdkStatsService("one3456789ten3456789twenty6789thirty6789", 276 "42", "x86_64", "1.7.8_09"); 277 assertEquals("one3456789ten3456789twenty6789th", m.getOsName()); 278 } 279 } 280