blob: 5b8cddb1a76c020a8be434b5e24bbd5563d74908 [file] [log] [blame]
b.janani68c55e12016-02-24 12:23:03 +05301/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
b.janani68c55e12016-02-24 12:23:03 +05303 *
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 org.onosproject.yangutils.utils.io.impl;
18
b.janani68c55e12016-02-24 12:23:03 +053019import java.io.File;
20import java.io.IOException;
Bharat saraswald6f12412016-03-28 15:50:13 +053021import java.lang.reflect.Constructor;
22import java.lang.reflect.InvocationTargetException;
Bharat saraswal96dfef02016-06-16 00:29:12 +053023import org.apache.commons.io.FileUtils;
Bharat saraswald6f12412016-03-28 15:50:13 +053024import org.junit.Rule;
25import org.junit.Test;
26import org.junit.rules.ExpectedException;
Shankara-Huaweibdf24bb2016-08-02 18:13:13 +053027import org.onosproject.yangutils.datamodel.javadatamodel.YangPluginConfig;
Bharat saraswald6f12412016-03-28 15:50:13 +053028import org.onosproject.yangutils.utils.UtilConstants;
b.janani68c55e12016-02-24 12:23:03 +053029
b.janani68c55e12016-02-24 12:23:03 +053030import static org.hamcrest.core.Is.is;
Bharat saraswal6ef0b762016-04-05 12:45:45 +053031import static org.hamcrest.core.IsNot.not;
Bharat saraswald6f12412016-03-28 15:50:13 +053032import static org.junit.Assert.assertThat;
33import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.addPackageInfo;
Bharat saraswald6f12412016-03-28 15:50:13 +053034import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.createDirectories;
Gaurav Agrawalc5f63272016-06-16 13:09:53 +053035import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.deleteDirectory;
Bharat saraswald6f12412016-03-28 15:50:13 +053036import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.trimAtLast;
b.janani68c55e12016-02-24 12:23:03 +053037
38/**
Bharat saraswal6ef0b762016-04-05 12:45:45 +053039 * Unit tests for YANG IO utils.
b.janani68c55e12016-02-24 12:23:03 +053040 */
41public final class YangIoUtilsTest {
42
Bharat saraswald6f12412016-03-28 15:50:13 +053043 private static final String BASE_DIR = "target/UnitTestCase";
44 private static final String CREATE_PATH = BASE_DIR + File.separator + "dir1/dir2/dir3/dir4/";
45 private static final String CHECK_STRING = "one, two, three, four, five, six";
46 private static final String TRIM_STRING = "one, two, three, four, five, ";
Bharat saraswalc0e04842016-05-12 13:16:57 +053047 private static final String CHECK1 = "check1";
48 private static final String PKG_INFO = "package-info.java";
49 private static final String PATH = "src/main/yangmodel/";
50 private static final String MSG = "Exception occured while creating package info file.";
b.janani68c55e12016-02-24 12:23:03 +053051
Bharat saraswald6f12412016-03-28 15:50:13 +053052 /**
53 * Expected exceptions.
54 */
b.janani68c55e12016-02-24 12:23:03 +053055 @Rule
56 public ExpectedException thrown = ExpectedException.none();
57
58 /**
59 * This test case checks whether the package-info file is created.
Bharat saraswald6f12412016-03-28 15:50:13 +053060 *
61 * @throws IOException when fails to do IO operations for test case
b.janani68c55e12016-02-24 12:23:03 +053062 */
63 @Test
64 public void addPackageInfoTest() throws IOException {
65
Bharat saraswald6f12412016-03-28 15:50:13 +053066 File dirPath = new File(CREATE_PATH);
b.janani68c55e12016-02-24 12:23:03 +053067 dirPath.mkdirs();
Bharat saraswal33dfa012016-05-17 19:59:16 +053068 addPackageInfo(dirPath, CHECK1, CREATE_PATH, false, getStubPluginConfig());
Bharat saraswalc0e04842016-05-12 13:16:57 +053069 File filePath = new File(dirPath + File.separator + PKG_INFO);
b.janani68c55e12016-02-24 12:23:03 +053070 assertThat(filePath.isFile(), is(true));
Bharat saraswalb551aae2016-07-14 15:18:20 +053071 FileUtils.deleteDirectory(new File(BASE_DIR));
b.janani68c55e12016-02-24 12:23:03 +053072 }
73
74 /**
Bharat saraswal2f00b4b2016-03-04 20:08:09 +053075 * This test case checks with an additional info in the path.
Bharat saraswald6f12412016-03-28 15:50:13 +053076 *
77 * @throws IOException when fails to do IO operations for test case
Bharat saraswal2f00b4b2016-03-04 20:08:09 +053078 */
79 @Test
80 public void addPackageInfoWithPathTest() throws IOException {
81
Bharat saraswald6f12412016-03-28 15:50:13 +053082 File dirPath = new File(CREATE_PATH);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +053083 dirPath.mkdirs();
Bharat saraswal33dfa012016-05-17 19:59:16 +053084 addPackageInfo(dirPath, CHECK1, PATH + CREATE_PATH, false, getStubPluginConfig());
Bharat saraswalc0e04842016-05-12 13:16:57 +053085 File filePath = new File(dirPath + File.separator + PKG_INFO);
86 assertThat(filePath.isFile(), is(true));
Bharat saraswalb551aae2016-07-14 15:18:20 +053087 FileUtils.deleteDirectory(new File(BASE_DIR));
Bharat saraswalc0e04842016-05-12 13:16:57 +053088 }
89
90 /**
91 * This test case checks with a child node.
92 *
93 * @throws IOException when fails to do IO operations for test case
94 */
95 @Test
96 public void addPackageInfoWithChildNode() throws IOException {
97
98 File dirPath = new File(CREATE_PATH);
99 dirPath.mkdirs();
Bharat saraswal33dfa012016-05-17 19:59:16 +0530100 addPackageInfo(dirPath, CHECK1, PATH + CREATE_PATH, true, getStubPluginConfig());
Bharat saraswalc0e04842016-05-12 13:16:57 +0530101 File filePath = new File(dirPath + File.separator + PKG_INFO);
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530102 assertThat(filePath.isFile(), is(true));
Bharat saraswalb551aae2016-07-14 15:18:20 +0530103 FileUtils.deleteDirectory(new File(BASE_DIR));
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530104 }
105
106 /**
b.janani68c55e12016-02-24 12:23:03 +0530107 * This test case checks whether the package-info file is created when invalid path is given.
Bharat saraswald6f12412016-03-28 15:50:13 +0530108 *
109 * @throws IOException when fails to do IO operations for test case
b.janani68c55e12016-02-24 12:23:03 +0530110 */
111 @Test
112 public void addPackageInfoWithEmptyPathTest() throws IOException {
113
b.janani1fef2732016-03-04 12:29:05 +0530114 File dirPath = new File("invalid/check");
b.janani68c55e12016-02-24 12:23:03 +0530115 thrown.expect(IOException.class);
Bharat saraswalc0e04842016-05-12 13:16:57 +0530116 thrown.expectMessage(MSG);
Bharat saraswal33dfa012016-05-17 19:59:16 +0530117 addPackageInfo(dirPath, CHECK1, CREATE_PATH, false, getStubPluginConfig());
Bharat saraswalc0e04842016-05-12 13:16:57 +0530118 File filePath1 = new File(dirPath + File.separator + PKG_INFO);
b.janani68c55e12016-02-24 12:23:03 +0530119 assertThat(filePath1.isFile(), is(false));
Bharat saraswal96dfef02016-06-16 00:29:12 +0530120 FileUtils.deleteDirectory(dirPath);
Bharat saraswalb551aae2016-07-14 15:18:20 +0530121 FileUtils.deleteDirectory(new File(BASE_DIR));
b.janani68c55e12016-02-24 12:23:03 +0530122 }
123
124 /**
125 * A private constructor is tested.
126 *
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530127 * @throws SecurityException if any security violation is observed
128 * @throws NoSuchMethodException if when the method is not found
129 * @throws IllegalArgumentException if there is illegal argument found
130 * @throws InstantiationException if instantiation is provoked for the private constructor
131 * @throws IllegalAccessException if instance is provoked or a method is provoked
132 * @throws InvocationTargetException when an exception occurs by the method or constructor
b.janani68c55e12016-02-24 12:23:03 +0530133 */
134 @Test
Bharat saraswal33dfa012016-05-17 19:59:16 +0530135 public void callPrivateConstructors()
136 throws SecurityException, NoSuchMethodException, IllegalArgumentException,
Vinod Kumar S38046502016-03-23 15:30:27 +0530137 InstantiationException, IllegalAccessException, InvocationTargetException {
b.janani68c55e12016-02-24 12:23:03 +0530138
139 Class<?>[] classesToConstruct = {YangIoUtils.class };
140 for (Class<?> clazz : classesToConstruct) {
141 Constructor<?> constructor = clazz.getDeclaredConstructor();
142 constructor.setAccessible(true);
Bharat saraswal6ef0b762016-04-05 12:45:45 +0530143 assertThat(null, not(constructor.newInstance()));
b.janani68c55e12016-02-24 12:23:03 +0530144 }
145 }
146
147 /**
148 * This test case checks if the directory is cleaned.
Bharat saraswald6f12412016-03-28 15:50:13 +0530149 *
150 * @throws IOException when fails to do IO operations for test case
b.janani68c55e12016-02-24 12:23:03 +0530151 */
152 @Test
153 public void cleanGeneratedDirTest() throws IOException {
154
Bharat saraswald6f12412016-03-28 15:50:13 +0530155 File baseDirPath = new File(BASE_DIR);
156 File createNewDir = new File(BASE_DIR + File.separator + UtilConstants.YANG_GEN_DIR);
b.janani68c55e12016-02-24 12:23:03 +0530157 createNewDir.mkdirs();
158 File createFile = new File(createNewDir + File.separator + "check1.java");
159 createFile.createNewFile();
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530160 deleteDirectory(baseDirPath.getAbsolutePath());
Bharat saraswal96dfef02016-06-16 00:29:12 +0530161 FileUtils.deleteDirectory(createNewDir);
162 FileUtils.deleteDirectory(baseDirPath);
b.janani68c55e12016-02-24 12:23:03 +0530163 }
164
165 /**
166 * This test case checks the cleaning method when an invalid path is provided.
Bharat saraswald6f12412016-03-28 15:50:13 +0530167 *
168 * @throws IOException when fails to do IO operations for test case
b.janani68c55e12016-02-24 12:23:03 +0530169 */
170 @Test
171 public void cleanWithInvalidDirTest() throws IOException {
172
Bharat saraswald6f12412016-03-28 15:50:13 +0530173 File baseDirPath = new File(BASE_DIR + "invalid");
VinodKumarS-Huaweicb3a1f52016-05-10 17:58:57 +0530174 deleteDirectory(baseDirPath.getAbsolutePath());
b.janani68c55e12016-02-24 12:23:03 +0530175 }
176
177 /**
178 * This test case tests whether the directories are getting created.
179 */
180 @Test
Bharat saraswal96dfef02016-06-16 00:29:12 +0530181 public void createDirectoryTest() throws IOException {
b.janani68c55e12016-02-24 12:23:03 +0530182
Bharat saraswald6f12412016-03-28 15:50:13 +0530183 File dirPath = createDirectories(CREATE_PATH);
b.janani68c55e12016-02-24 12:23:03 +0530184 assertThat(dirPath.isDirectory(), is(true));
Bharat saraswalb551aae2016-07-14 15:18:20 +0530185 FileUtils.deleteDirectory(new File(BASE_DIR));
b.janani68c55e12016-02-24 12:23:03 +0530186 }
187
188 /**
Bharat saraswald6f12412016-03-28 15:50:13 +0530189 * Unit test case for trim at last method.
190 */
191 @Test
192 public void testForTrimAtLast() {
193
194 String test = trimAtLast(CHECK_STRING, "six");
195 assertThat(test.contains(TRIM_STRING), is(true));
b.janani68c55e12016-02-24 12:23:03 +0530196 }
Bharat saraswal6ef0b762016-04-05 12:45:45 +0530197
Bharat saraswal33dfa012016-05-17 19:59:16 +0530198 /**
199 * Returns stub pluginConfig.
200 *
201 * @return stub pluginConfig
202 */
203 private YangPluginConfig getStubPluginConfig() {
204 YangPluginConfig pluginConfig = new YangPluginConfig();
205 pluginConfig.setConflictResolver(null);
206 return pluginConfig;
207 }
Bharat saraswal2f00b4b2016-03-04 20:08:09 +0530208}