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