/* * 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())); } }