| /* |
| * Copyright 2015-present Open Networking Laboratory |
| * |
| * 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 org.onosproject.common.app; |
| |
| import com.google.common.collect.ImmutableSet; |
| import com.google.common.io.ByteStreams; |
| import com.google.common.io.Files; |
| import org.junit.After; |
| import org.junit.Before; |
| import org.junit.Ignore; |
| import org.junit.Test; |
| import org.onlab.util.Tools; |
| import org.onosproject.app.ApplicationDescription; |
| import org.onosproject.app.ApplicationException; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.util.Set; |
| |
| import static org.junit.Assert.*; |
| import static org.onosproject.app.DefaultApplicationDescriptionTest.*; |
| |
| /** |
| * Suite of tests for the application archive utility. |
| */ |
| public class ApplicationArchiveTest { |
| |
| static final File STORE = Files.createTempDir(); |
| static final String SYSTEM = "system"; |
| |
| private ApplicationArchive aar = new ApplicationArchive(); |
| |
| @Before |
| public void setUp() { |
| aar.setRootPath(STORE.getAbsolutePath()); |
| } |
| |
| @After |
| public void tearDown() throws IOException { |
| if (STORE.exists()) { |
| Tools.removeDirectory(STORE); |
| Tools.removeDirectory(SYSTEM); |
| } |
| } |
| |
| private void validate(ApplicationDescription app) { |
| assertEquals("incorrect name", APP_NAME, app.name()); |
| assertEquals("incorrect version", VER, app.version()); |
| assertEquals("incorrect origin", ORIGIN, app.origin()); |
| assertEquals("incorrect role", ROLE, app.role()); |
| |
| assertEquals("incorrect category", CATEGORY, app.category()); |
| assertEquals("incorrect url", URL, app.url()); |
| assertEquals("incorrect readme", README, app.readme()); |
| |
| assertEquals("incorrect title", TITLE, app.title()); |
| assertEquals("incorrect description", DESC, app.description()); |
| assertEquals("incorrect features URI", FURL, app.featuresRepo().get()); |
| assertEquals("incorrect permissions", PERMS, app.permissions()); |
| assertEquals("incorrect features", FEATURES, app.features()); |
| } |
| |
| @Test |
| public void saveZippedApp() throws IOException { |
| InputStream stream = getClass().getResourceAsStream("app.zip"); |
| ApplicationDescription app = aar.saveApplication(stream); |
| validate(app); |
| stream.close(); |
| } |
| |
| @Test |
| public void savePlainApp() throws IOException { |
| InputStream stream = getClass().getResourceAsStream("app.xml"); |
| ApplicationDescription app = aar.saveApplication(stream); |
| validate(app); |
| stream.close(); |
| } |
| |
| @Test |
| public void saveSelfContainedApp() throws IOException { |
| InputStream stream = getClass().getResourceAsStream("app.scj"); |
| ApplicationDescription app = aar.saveApplication(stream); |
| validate(app); |
| stream.close(); |
| } |
| |
| @Test |
| public void loadApp() throws IOException { |
| saveZippedApp(); |
| ApplicationDescription app = aar.getApplicationDescription(APP_NAME); |
| validate(app); |
| } |
| |
| @Test |
| public void getAppNames() throws IOException { |
| saveZippedApp(); |
| Set<String> names = aar.getApplicationNames(); |
| assertEquals("incorrect names", ImmutableSet.of(APP_NAME), names); |
| } |
| |
| @Test |
| public void purgeApp() throws IOException { |
| saveZippedApp(); |
| aar.purgeApplication(APP_NAME); |
| assertEquals("incorrect names", ImmutableSet.<String>of(), |
| aar.getApplicationNames()); |
| } |
| |
| @Test |
| public void getAppZipStream() throws IOException { |
| saveZippedApp(); |
| InputStream stream = aar.getApplicationInputStream(APP_NAME); |
| byte[] orig = ByteStreams.toByteArray(getClass().getResourceAsStream("app.zip")); |
| byte[] loaded = ByteStreams.toByteArray(stream); |
| assertArrayEquals("incorrect stream", orig, loaded); |
| stream.close(); |
| } |
| |
| @Test |
| public void getAppXmlStream() throws IOException { |
| savePlainApp(); |
| InputStream stream = aar.getApplicationInputStream(APP_NAME); |
| byte[] orig = ByteStreams.toByteArray(getClass().getResourceAsStream("app.xml")); |
| byte[] loaded = ByteStreams.toByteArray(stream); |
| assertArrayEquals("incorrect stream", orig, loaded); |
| stream.close(); |
| } |
| |
| @Test |
| public void active() throws IOException { |
| savePlainApp(); |
| assertFalse("should not be active", aar.isActive(APP_NAME)); |
| aar.setActive(APP_NAME); |
| assertTrue("should not be active", aar.isActive(APP_NAME)); |
| aar.clearActive(APP_NAME); |
| assertFalse("should not be active", aar.isActive(APP_NAME)); |
| } |
| |
| @Test(expected = ApplicationException.class) |
| public void getBadAppDesc() throws IOException { |
| aar.getApplicationDescription("org.foo.BAD"); |
| } |
| |
| @Test(expected = ApplicationException.class) |
| public void getBadAppStream() throws IOException { |
| aar.getApplicationInputStream("org.foo.BAD"); |
| } |
| |
| @Test(expected = ApplicationException.class) |
| @Ignore("No longer needed") |
| public void setBadActive() throws IOException { |
| aar.setActive("org.foo.BAD"); |
| } |
| |
| @Test // (expected = ApplicationException.class) |
| public void purgeBadApp() throws IOException { |
| aar.purgeApplication("org.foo.BAD"); |
| } |
| |
| } |