2 * ============LICENSE_START=======================================================
3 * ONAP : ccsdk features
4 * ================================================================================
5 * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.ccsdk.features.sdnr.wt.dataprovider.test;
24 import static org.junit.Assert.*;
27 import java.io.IOException;
28 import java.io.StringWriter;
29 import java.nio.file.Files;
30 import java.nio.file.Path;
31 import java.nio.file.attribute.FileAttribute;
32 import java.nio.file.attribute.PosixFilePermission;
33 import java.nio.file.attribute.PosixFilePermissions;
34 import java.text.ParseException;
35 import java.text.SimpleDateFormat;
36 import java.util.Comparator;
37 import java.util.EnumSet;
40 import javax.servlet.ServletException;
41 import javax.servlet.ServletOutputStream;
42 import javax.servlet.http.HttpServletRequest;
43 import javax.servlet.http.HttpServletResponse;
45 import org.junit.AfterClass;
46 import org.junit.BeforeClass;
47 import org.junit.Test;
48 import org.onap.ccsdk.features.sdnr.wt.dataprovider.data.YangFileProvider;
49 import org.onap.ccsdk.features.sdnr.wt.dataprovider.data.YangFilename;
50 import org.onap.ccsdk.features.sdnr.wt.dataprovider.http.YangSchemaHttpServlet;
52 import static org.mockito.Mockito.mock;
53 import static org.mockito.Mockito.verify;
54 import static org.mockito.Mockito.when;
56 public class TestYangProvider {
58 private static final String TESTPATH = "cache/schema/";
62 public static void init() {
63 Set<PosixFilePermission> perms;
64 FileAttribute<?> attr;
65 perms = EnumSet.noneOf(PosixFilePermission.class);
67 perms.add(PosixFilePermission.OWNER_READ);
68 perms.add(PosixFilePermission.OWNER_WRITE);
69 perms.add(PosixFilePermission.OWNER_EXECUTE);
71 attr = PosixFilePermissions.asFileAttribute(perms);
73 Files.createDirectories(new File(TESTPATH).toPath(),attr);
74 new File(TESTPATH+new YangFilename("module1","2010-01-01").getFilename()).createNewFile();
75 new File(TESTPATH+new YangFilename("module2","2010-01-01").getFilename()).createNewFile();
76 new File(TESTPATH+new YangFilename("module2","2010-04-01").getFilename()).createNewFile();
77 new File(TESTPATH+new YangFilename("module3","2010-01-01").getFilename()).createNewFile();
78 new File(TESTPATH+new YangFilename("module4","2010-05-01").getFilename()).createNewFile();
79 new File(TESTPATH+new YangFilename("module5","2010-01-11").getFilename()).createNewFile();
80 new File(TESTPATH+new YangFilename("module6","2010-01-01").getFilename()).createNewFile();
81 } catch (IOException | ParseException e) {
86 public static void deinit() {
88 Files.walk(new File("cache").toPath())
89 .sorted(Comparator.reverseOrder())
91 .forEach(File::delete);
92 } catch (IOException e) {
93 System.err.println(e);
97 public void testExisting() {
98 YangFileProvider provider= new YangFileProvider(TESTPATH);
99 assertTrue(provider.hasFileForModule("module1","2010-01-01"));
100 assertTrue(provider.hasFileForModule("module2"));
101 assertTrue(provider.hasFileForModule("module3"));
102 assertFalse(provider.hasFileForModule("module5","2010-01-01"));
105 public void testRevision() throws ParseException {
106 SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
107 YangFileProvider provider= new YangFileProvider(TESTPATH);
108 YangFilename f1 = provider.getFileForModule("module1","2010-01-01");
109 assertEquals("module1",f1.getModule());
110 assertEquals(sdf.parse("2010-01-01"),f1.getRevision());
111 YangFilename f2 = provider.getFileForModule("module2");
112 assertEquals("module2",f2.getModule());
113 assertEquals(sdf.parse("2010-04-01"),f2.getRevision());
114 f2 = provider.getFileForModule("module2","2010-02-01");
115 assertEquals("module2",f2.getModule());
116 assertEquals(sdf.parse("2010-04-01"),f2.getRevision());
117 YangFilename f3 = provider.getFileForModule("module3");
118 assertEquals("module3",f3.getModule());
119 assertEquals(sdf.parse("2010-01-01"),f3.getRevision());
120 f3 = provider.getFileForModule("module3","2010-04-01");
124 public void testServlet() throws IOException, ServletException {
125 HelpYangSchemaHttpServlet servlet = new HelpYangSchemaHttpServlet();
126 HttpServletRequest req = mock(HttpServletRequest.class);
127 HttpServletResponse resp = mock(HttpServletResponse.class);
129 when(req.getRequestURI()).thenReturn("/yang-schema/module1");
130 StringWriter out = new StringWriter();
131 ServletOutputStream printOut = new ServletOutputStream() {
134 public void write(int arg0) throws IOException {
138 when(resp.getOutputStream()).thenReturn(printOut);
139 servlet.doGet(req,resp);
140 verify(resp).setStatus(200);
141 verify(resp).setContentType("text/plain");
145 public void testServletBad() throws IOException, ServletException {
146 HelpYangSchemaHttpServlet servlet = new HelpYangSchemaHttpServlet();
147 HttpServletRequest req = mock(HttpServletRequest.class);
148 HttpServletResponse resp = mock(HttpServletResponse.class);
150 when(req.getRequestURI()).thenReturn("/yang-schema/module1/2020-01-01");
151 StringWriter out = new StringWriter();
152 ServletOutputStream printOut = new ServletOutputStream() {
155 public void write(int arg0) throws IOException {
159 when(resp.getOutputStream()).thenReturn(printOut);
160 servlet.doGet(req,resp);
161 verify(resp).sendError(HttpServletResponse.SC_NOT_FOUND);
165 public void testServletNear() throws IOException, ServletException {
166 HelpYangSchemaHttpServlet servlet = new HelpYangSchemaHttpServlet();
167 HttpServletRequest req = mock(HttpServletRequest.class);
168 HttpServletResponse resp = mock(HttpServletResponse.class);
170 when(req.getRequestURI()).thenReturn("/yang-schema/module2/2010-03-01");
171 StringWriter out = new StringWriter();
172 ServletOutputStream printOut = new ServletOutputStream() {
175 public void write(int arg0) throws IOException {
179 when(resp.getOutputStream()).thenReturn(printOut);
180 servlet.doGet(req,resp);
181 verify(resp).setStatus(200);
182 verify(resp).setContentType("text/plain");
185 private static class HelpYangSchemaHttpServlet extends YangSchemaHttpServlet{
190 private static final long serialVersionUID = 1L;
193 public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
194 super.doGet(req, resp);