/** * This file is part of CloudML [ http://cloudml.org ] * * Copyright (C) 2012 - SINTEF ICT * Contact: Franck Chauvel <franck.chauvel@sintef.no> * * Module: root * * CloudML is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * CloudML is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with CloudML. If not, see * <http://www.gnu.org/licenses/>. */ package test.cloudml.codecs.library; import java.io.File; import java.io.FileNotFoundException; import junit.framework.TestCase; import org.cloudml.codecs.library.CodecsLibrary; import org.cloudml.core.Deployment; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import static org.cloudml.core.samples.SensApp.*; import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.Matchers.*; @RunWith(JUnit4.class) public class SaveAsTest extends TestCase { @Test(expected = IllegalArgumentException.class) public void saveAsShouldRejectNullAsDeploymentModel() throws FileNotFoundException { aCodecLibrary().saveAs(null, "any_file.json"); } @Test(expected = IllegalArgumentException.class) public void saveAsShouldRejectEmptyStringAsFileName() throws FileNotFoundException { aCodecLibrary().saveAs(new Deployment(), ""); } @Test(expected = IllegalArgumentException.class) public void saveAsShouldRejectNullAsFileName() throws FileNotFoundException { aCodecLibrary().saveAs(new Deployment(), null); } @Test public void saveAsShouldProduceASmallFileForAnEmptyDeployment() throws FileNotFoundException { final String fileName = "test.json"; aCodecLibrary().saveAs(new Deployment(), fileName); assertThatFileIsNearlyEmpty(fileName); cleanDirectory(); } @Test public void testSaveAsShouldProduceALargeFileForSensApp() throws FileNotFoundException { final String fileName = "sensapp.json"; aCodecLibrary().saveAs(completeSensApp().build(), fileName); final long sizeInBytes = 1000L; assertThatFileSizeIsAtLeast(fileName, sizeInBytes); cleanDirectory(); } @Test(expected = IllegalArgumentException.class) public void saveAsShouldRejectFileWhoseFormatIsNotSupported() throws FileNotFoundException { aCodecLibrary().saveAs(new Deployment(), "test.pouet"); } @Test public void saveAsShouldAcceptFilesThatAreSupportedRegardlessOfTheCase() throws FileNotFoundException { String aFileWithUppercaseExtension = "test.JSON"; aCodecLibrary().saveAs(new Deployment(), aFileWithUppercaseExtension); assertThatFileIsNearlyEmpty(aFileWithUppercaseExtension); cleanDirectory(); } // Helpers methods private CodecsLibrary aCodecLibrary() { return new CodecsLibrary(); } private File assertThatFileExists(String path) { final File file = new File(path); assertThat("missing file '" + path + "'", file.exists()); return file; } private File assertThatFileIsNearlyEmpty(String path) { final long minimumSize = 70L; // The empty deployment is 66 bytes final File file = assertThatFileExists(path); assertThat("file '" + file + "' is too large", file.length(), is(lessThan(minimumSize))); return file; } private File assertThatFileSizeIsAtLeast(String path, long maxSize) { final File file = assertThatFileExists(path); assertThat("file '" + file + "' is too small", file.length(), is(greaterThan(maxSize))); return file; } private void cleanDirectory() { File test = new File("test.json"); test.delete(); File sensapp = new File("sensapp.json"); sensapp.delete(); } }