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 17package com.android.sdkuilib.internal.repository.ui; 18 19import com.android.sdklib.SdkManager; 20import com.android.sdklib.SdkManagerTestCase; 21import com.android.sdklib.repository.SdkRepoConstants; 22import com.android.sdkuilib.internal.repository.MockDownloadCache; 23import com.android.sdkuilib.internal.repository.MockUpdaterData; 24 25import java.util.Arrays; 26 27public class SdkManagerUpgradeTest extends SdkManagerTestCase { 28 29 @Override 30 public void setUp() throws Exception { 31 super.setUp(); 32 } 33 34 @Override 35 public void tearDown() throws Exception { 36 super.tearDown(); 37 } 38 39 /** 40 * Create a mock page and list the current SDK state 41 */ 42 public void testPackagesPage1() throws Exception { 43 SdkManager sdkman = getSdkManager(); 44 45 MockUpdaterData updaterData = new MockUpdaterData(sdkman); 46 MockDownloadCache cache = (MockDownloadCache) updaterData.getDownloadCache(); 47 updaterData.setupDefaultSources(); 48 49 MockPackagesPageImpl pageImpl = new MockPackagesPageImpl(updaterData); 50 pageImpl.postCreate(); 51 pageImpl.performFirstLoad(); 52 53 // We have no network access possible and no mock download cache items. 54 // The only thing visible in the display are the local packages as set by 55 // the fake locally-installed SDK. 56 String actual = pageImpl.getMockTreeDisplay(); 57 assertEquals( 58 "[] Tools | | | \n" + 59 " L_[] Android SDK Tools | | 0 | Installed\n" + 60 "[] Android 0.0 (API 0) | | | \n" + 61 " L_[] SDK Platform | | 1 | Installed\n" + 62 " L_[] Sources for Android SDK | | 0 | Installed\n" + 63 "[] Extras | | | ", 64 actual); 65 66 assertEquals( 67 "[]", // there are no direct downloads till we try to install. 68 Arrays.toString(cache.getDirectHits())); 69 assertEquals( 70 "[<https://dl-ssl.google.com/android/repository/addons_list-1.xml : 1>, " + 71 "<https://dl-ssl.google.com/android/repository/addons_list-2.xml : 1>, " + 72 "<https://dl-ssl.google.com/android/repository/repository-5.xml : 2>, " + 73 "<https://dl-ssl.google.com/android/repository/repository-6.xml : 2>, " + 74 "<https://dl-ssl.google.com/android/repository/repository-7.xml : 2>, " + 75 "<https://dl-ssl.google.com/android/repository/repository.xml : 2>]", 76 Arrays.toString(cache.getCachedHits())); 77 78 79 // Now prepare a tools update on the server and reload 80 setupToolsXml1(cache); 81 cache.clearDirectHits(); 82 cache.clearCachedHits(); 83 pageImpl.fullReload(); 84 85 actual = pageImpl.getMockTreeDisplay(); 86 assertEquals( 87 "[] Tools | | | \n" + 88 " L_[] Android SDK Tools | | 0 | Update available: rev. 20.0.3\n" + 89 " L_[] Android SDK Platform-tools | | 14 | Not installed \n" + 90 "[] Android 0.0 (API 0) | | | \n" + 91 " L_[] SDK Platform | | 1 | Installed \n" + 92 " L_[] Sources for Android SDK | | 0 | Installed \n" + 93 "[] Extras | | | ", 94 actual); 95 96 assertEquals( 97 "[]", // there are no direct downloads till we try to install. 98 Arrays.toString(cache.getDirectHits())); 99 assertEquals( 100 "[<https://dl-ssl.google.com/android/repository/repository-5.xml : 1>, " + 101 "<https://dl-ssl.google.com/android/repository/repository-6.xml : 1>, " + 102 "<https://dl-ssl.google.com/android/repository/repository-7.xml : 1>, " + 103 "<https://dl-ssl.google.com/android/repository/repository.xml : 1>]", 104 Arrays.toString(cache.getCachedHits())); 105 106 107 // We should get the same display if we restart the manager page from scratch 108 // (e.g. simulate a first load) 109 110 cache.clearDirectHits(); 111 cache.clearCachedHits(); 112 pageImpl = new MockPackagesPageImpl(updaterData); 113 pageImpl.postCreate(); 114 pageImpl.performFirstLoad(); 115 116 actual = pageImpl.getMockTreeDisplay(); 117 assertEquals( 118 "[] Tools | | | \n" + 119 " L_[] Android SDK Tools | | 0 | Update available: rev. 20.0.3\n" + 120 " L_[] Android SDK Platform-tools | | 14 | Not installed \n" + 121 "[] Android 0.0 (API 0) | | | \n" + 122 " L_[] SDK Platform | | 1 | Installed \n" + 123 " L_[] Sources for Android SDK | | 0 | Installed \n" + 124 "[] Extras | | | ", 125 actual); 126 127 assertEquals( 128 "[]", // there are no direct downloads till we try to install. 129 Arrays.toString(cache.getDirectHits())); 130 assertEquals( 131 "[<https://dl-ssl.google.com/android/repository/repository-5.xml : 1>, " + 132 "<https://dl-ssl.google.com/android/repository/repository-6.xml : 1>, " + 133 "<https://dl-ssl.google.com/android/repository/repository-7.xml : 1>, " + 134 "<https://dl-ssl.google.com/android/repository/repository.xml : 1>]", 135 Arrays.toString(cache.getCachedHits())); 136 } 137 138 private void setupToolsXml1(MockDownloadCache cache) throws Exception { 139 String repoXml = 140 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 141 "<sdk:sdk-repository xmlns:sdk=\"http://schemas.android.com/sdk/android/repository/7\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" + 142 "<sdk:license id=\"android-sdk-license\" type=\"text\">Blah blah blah.</sdk:license>\n" + 143 "\n" + 144 "<sdk:platform-tool>\n" + 145 " <sdk:revision>\n" + 146 " <sdk:major>14</sdk:major>\n" + 147 " </sdk:revision>\n" + 148 " <sdk:archives>\n" + 149 " <sdk:archive arch=\"any\" os=\"windows\">\n" + 150 " <sdk:size>11159472</sdk:size>\n" + 151 " <sdk:checksum type=\"sha1\">6028258d8f2fba14d8b40c3cf507afa0289aaa13</sdk:checksum>\n" + 152 " <sdk:url>platform-tools_r14-windows.zip</sdk:url>\n" + 153 " </sdk:archive>\n" + 154 " <sdk:archive arch=\"any\" os=\"linux\">\n" + 155 " <sdk:size>10985068</sdk:size>\n" + 156 " <sdk:checksum type=\"sha1\">6e2bc329c9485eb383172cbc2cde8b0c0cd1843f</sdk:checksum>\n" + 157 " <sdk:url>platform-tools_r14-linux.zip</sdk:url>\n" + 158 " </sdk:archive>\n" + 159 " <sdk:archive arch=\"any\" os=\"macosx\">\n" + 160 " <sdk:size>11342461</sdk:size>\n" + 161 " <sdk:checksum type=\"sha1\">4a015090c6a209fc33972acdbc65745e0b3c08b9</sdk:checksum>\n" + 162 " <sdk:url>platform-tools_r14-macosx.zip</sdk:url>\n" + 163 " </sdk:archive>\n" + 164 " </sdk:archives>\n" + 165 "</sdk:platform-tool>\n" + 166 "\n" + 167 "<sdk:tool>\n" + 168 " <sdk:revision>\n" + 169 " <sdk:major>20</sdk:major>\n" + 170 " <sdk:minor>0</sdk:minor>\n" + 171 " <sdk:micro>3</sdk:micro>\n" + 172 " </sdk:revision>\n" + 173 " <sdk:min-platform-tools-rev>\n" + 174 " <sdk:major>12</sdk:major>\n" + 175 " </sdk:min-platform-tools-rev>\n" + 176 " <sdk:archives>\n" + 177 " <sdk:archive arch=\"any\" os=\"windows\">\n" + 178 " <sdk:size>90272048</sdk:size>\n" + 179 " <sdk:checksum type=\"sha1\">54fb94168e631e211910f88aa40c532205730dd4</sdk:checksum>\n" + 180 " <sdk:url>tools_r20.0.3-windows.zip</sdk:url>\n" + 181 " </sdk:archive>\n" + 182 " <sdk:archive arch=\"any\" os=\"linux\">\n" + 183 " <sdk:size>82723559</sdk:size>\n" + 184 " <sdk:checksum type=\"sha1\">09bc633b406ae81981e3a0db19426acbb01ef219</sdk:checksum>\n" + 185 " <sdk:url>tools_r20.0.3-linux.zip</sdk:url>\n" + 186 " </sdk:archive>\n" + 187 " <sdk:archive arch=\"any\" os=\"macosx\">\n" + 188 " <sdk:size>58197071</sdk:size>\n" + 189 " <sdk:checksum type=\"sha1\">09cee5ff3226277a6f0c07dcd29cba4ffc2e1da4</sdk:checksum>\n" + 190 " <sdk:url>tools_r20.0.3-macosx.zip</sdk:url>\n" + 191 " </sdk:archive>\n" + 192 " </sdk:archives>\n" + 193 "</sdk:tool>\n" + 194 "\n" + 195 "</sdk:sdk-repository>\n"; 196 197 String url = SdkRepoConstants.URL_GOOGLE_SDK_SITE + 198 String.format(SdkRepoConstants.URL_DEFAULT_FILENAME, SdkRepoConstants.NS_LATEST_VERSION); 199 200 cache.registerCachedPayload(url, repoXml.getBytes("UTF-8")); 201 } 202 203} 204