blob: 9dfe12e81f77542f9c764f3cb07e2b9b3c47cb2b [file] [log] [blame]
/*
* Copyright (C) 2013 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.sdklib.internal.repository.updater;
import com.android.annotations.NonNull;
import com.android.sdklib.SdkManager;
import com.android.sdklib.SdkManagerTestCase;
import com.android.sdklib.internal.repository.packages.MockEmptyPackage;
import com.android.sdklib.mock.MockLog;
import com.android.sdklib.repository.PkgProps;
import com.android.utils.IReaderLogger;
import com.google.common.base.Charsets;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;
public class UpdaterDataTest extends SdkManagerTestCase {
private static class MockReaderLogger implements IReaderLogger {
private final MockLog mLog;
private final LinkedList<String> mInputLines = new LinkedList<String>();
public MockReaderLogger(MockLog log, String...inputLines) {
mLog = log;
mInputLines.addAll(Arrays.asList(inputLines));
}
@Override
public void warning(String msgFormat, Object... args) {
mLog.warning(msgFormat, args);
}
@Override
public void verbose(String msgFormat, Object... args) {
mLog.verbose(msgFormat, args);
}
@Override
public void info(String msgFormat, Object... args) {
mLog.info(msgFormat, args);
}
@Override
public void error(Throwable t, String msgFormat, Object... args) {
mLog.error(t, msgFormat, args);
}
@Override
public int readLine(byte[] inputBuffer) throws IOException {
if (!mInputLines.isEmpty()) {
String line = mInputLines.remove();
byte[] bytes = line.getBytes(Charsets.UTF_8);
int len = bytes.length;
if (inputBuffer.length < len) {
len = inputBuffer.length;
}
System.arraycopy(bytes, 0, inputBuffer, 0, len);
for (int a = len, n = inputBuffer.length; a < n; a++) {
inputBuffer[a] = 0;
}
return len;
}
return 0;
}
public String[] getUnreadInput() {
return mInputLines.toArray(new String[mInputLines.size()]);
}
// -- from mock log --
@Override
public String toString() {
return mLog.toString();
}
@NonNull
public List<String> getMessages() {
return mLog.getMessages();
}
public void clear() {
mLog.clear();
}
}
public final void testAcceptLicenses_Empty() {
SdkManager sdkman = getSdkManager();
MockReaderLogger inputLog = new MockReaderLogger(new MockLog(), "");
UpdaterData data = new UpdaterData(sdkman.getLocation(), inputLog);
String acceptLicenses = null;
List<ArchiveInfo> archives = new ArrayList<ArchiveInfo>();
data.acceptLicense(archives , acceptLicenses, 3);
assertTrue(archives.isEmpty());
assertEquals("[]", Arrays.toString(inputLog.getMessages().toArray()));
assertEquals("[]", Arrays.toString(inputLog.getUnreadInput()));
}
public final void testAcceptLicenses_NoAnswer() {
SdkManager sdkman = getSdkManager();
MockReaderLogger inputLog = new MockReaderLogger(new MockLog(), "");
UpdaterData data = new UpdaterData(sdkman.getLocation(), inputLog);
String acceptLicenses = null;
List<ArchiveInfo> infos = new ArrayList<ArchiveInfo>();
Properties props = new Properties();
props.setProperty(PkgProps.PKG_LICENSE_REF, "sdk-license");
props.setProperty(PkgProps.PKG_LICENSE, "This is the license text.\nEtc etc.\n");
MockEmptyPackage p = new MockEmptyPackage("test", props);
infos.add(new ArchiveInfo(p.getLocalArchive(), null, null));
assertEquals("[MockEmptyPackage 'test']", Arrays.toString(infos.toArray()));
data.acceptLicense(infos , acceptLicenses, 3);
assertEquals(
"[P -------------------------------\n" +
", P License id: sdk-license-dddb8a39\n" +
", P Used by: \n" +
" - MockEmptyPackage 'test'\n" +
", P -------------------------------\n" +
"\n" +
", P This is the license text.\n" +
"Etc etc.\n" +
"\n" +
", P Do you accept the license 'sdk-license-dddb8a39' [y/n]: , P \n" +
", P Unknown response ''.\n" +
", P Do you accept the license 'sdk-license-dddb8a39' [y/n]: , P \n" +
", P Unknown response ''.\n" +
", P Do you accept the license 'sdk-license-dddb8a39' [y/n]: , P \n" +
", P Unknown response ''.\n" +
", P Max number of retries exceeded. Rejecting 'sdk-license-dddb8a39'\n" +
", P Package MockEmptyPackage 'test' not installed due to rejected license 'sdk-license-dddb8a39'.\n" +
"]", Arrays.toString(inputLog.getMessages().toArray()));
assertEquals("[]", Arrays.toString(infos.toArray()));
assertEquals("[]", Arrays.toString(inputLog.getUnreadInput()));
}
public final void testAcceptLicenses_Answer() {
SdkManager sdkman = getSdkManager();
MockReaderLogger inputLog = new MockReaderLogger(new MockLog(), "yes");
UpdaterData data = new UpdaterData(sdkman.getLocation(), inputLog);
String acceptLicenses = null;
List<ArchiveInfo> infos = new ArrayList<ArchiveInfo>();
Properties props = new Properties();
props.setProperty(PkgProps.PKG_LICENSE_REF, "sdk-license");
props.setProperty(PkgProps.PKG_LICENSE, "This is the license text.\nEtc etc.\n");
MockEmptyPackage p = new MockEmptyPackage("test", props);
infos.add(new ArchiveInfo(p.getLocalArchive(), null, null));
assertEquals("[MockEmptyPackage 'test']", Arrays.toString(infos.toArray()));
data.acceptLicense(infos , acceptLicenses, 3);
assertEquals(
"[P -------------------------------\n" +
", P License id: sdk-license-dddb8a39\n" +
", P Used by: \n" +
" - MockEmptyPackage 'test'\n" +
", P -------------------------------\n" +
"\n" +
", P This is the license text.\n" +
"Etc etc.\n" +
"\n" +
", P Do you accept the license 'sdk-license-dddb8a39' [y/n]: , P \n" +
"]", Arrays.toString(inputLog.getMessages().toArray()));
assertEquals("[MockEmptyPackage 'test']", Arrays.toString(infos.toArray()));
assertEquals("[]", Arrays.toString(inputLog.getUnreadInput()));
}
}