1 /*******************************************************************************
2 * ============LICENSE_START========================================================================
3 * ONAP : ccsdk feature sdnr wt
4 * =================================================================================================
5 * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
6 * =================================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
8 * in compliance with the License. You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software distributed under the License
13 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
14 * or implied. See the License for the specific language governing permissions and limitations under
16 * ============LICENSE_END==========================================================================
17 ******************************************************************************/
18 package org.onap.ccsdk.features.sdnr.wt.dataprovider.test;
20 import static org.junit.Assert.*;
23 import java.io.IOException;
24 import java.io.StringWriter;
25 import java.nio.file.Files;
26 import java.nio.file.Path;
27 import java.nio.file.attribute.FileAttribute;
28 import java.nio.file.attribute.PosixFilePermission;
29 import java.nio.file.attribute.PosixFilePermissions;
30 import java.text.ParseException;
31 import java.text.SimpleDateFormat;
32 import java.util.Comparator;
33 import java.util.EnumSet;
36 import javax.servlet.ServletException;
37 import javax.servlet.ServletOutputStream;
38 import javax.servlet.http.HttpServletRequest;
39 import javax.servlet.http.HttpServletResponse;
41 import org.junit.AfterClass;
42 import org.junit.BeforeClass;
43 import org.junit.Test;
44 import org.onap.ccsdk.features.sdnr.wt.dataprovider.data.YangFileProvider;
45 import org.onap.ccsdk.features.sdnr.wt.dataprovider.data.YangFilename;
46 import org.onap.ccsdk.features.sdnr.wt.dataprovider.http.YangSchemaHttpServlet;
48 import static org.mockito.Mockito.mock;
49 import static org.mockito.Mockito.verify;
50 import static org.mockito.Mockito.when;
52 public class TestYangProvider {
54 private static final String TESTPATH = "cache/schema/";
58 public static void init() {
59 Set<PosixFilePermission> perms;
60 FileAttribute<?> attr;
61 perms = EnumSet.noneOf(PosixFilePermission.class);
63 perms.add(PosixFilePermission.OWNER_READ);
64 perms.add(PosixFilePermission.OWNER_WRITE);
65 perms.add(PosixFilePermission.OWNER_EXECUTE);
67 attr = PosixFilePermissions.asFileAttribute(perms);
69 Files.createDirectories(new File(TESTPATH).toPath(),attr);
70 new File(TESTPATH+new YangFilename("module1","2010-01-01").getFilename()).createNewFile();
71 new File(TESTPATH+new YangFilename("module2","2010-01-01").getFilename()).createNewFile();
72 new File(TESTPATH+new YangFilename("module2","2010-04-01").getFilename()).createNewFile();
73 new File(TESTPATH+new YangFilename("module3","2010-01-01").getFilename()).createNewFile();
74 new File(TESTPATH+new YangFilename("module4","2010-05-01").getFilename()).createNewFile();
75 new File(TESTPATH+new YangFilename("module5","2010-01-11").getFilename()).createNewFile();
76 new File(TESTPATH+new YangFilename("module6","2010-01-01").getFilename()).createNewFile();
77 } catch (IOException | ParseException e) {
82 public static void deinit() {
84 Files.walk(new File("cache").toPath())
85 .sorted(Comparator.reverseOrder())
87 .forEach(File::delete);
88 } catch (IOException e) {
89 System.err.println(e);
93 public void testExisting() {
94 YangFileProvider provider= new YangFileProvider(TESTPATH);
95 assertTrue(provider.hasFileForModule("module1","2010-01-01"));
96 assertTrue(provider.hasFileForModule("module2"));
97 assertTrue(provider.hasFileForModule("module3"));
98 assertFalse(provider.hasFileForModule("module5","2010-01-01"));
101 public void testRevision() throws ParseException {
102 SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");
103 YangFileProvider provider= new YangFileProvider(TESTPATH);
104 YangFilename f1 = provider.getFileForModule("module1","2010-01-01");
105 assertEquals("module1",f1.getModule());
106 assertEquals(sdf.parse("2010-01-01"),f1.getRevision());
107 YangFilename f2 = provider.getFileForModule("module2");
108 assertEquals("module2",f2.getModule());
109 assertEquals(sdf.parse("2010-04-01"),f2.getRevision());
110 f2 = provider.getFileForModule("module2","2010-02-01");
111 assertEquals("module2",f2.getModule());
112 assertEquals(sdf.parse("2010-04-01"),f2.getRevision());
113 YangFilename f3 = provider.getFileForModule("module3");
114 assertEquals("module3",f3.getModule());
115 assertEquals(sdf.parse("2010-01-01"),f3.getRevision());
116 f3 = provider.getFileForModule("module3","2010-04-01");
120 public void testServlet() throws IOException, ServletException {
121 HelpYangSchemaHttpServlet servlet = new HelpYangSchemaHttpServlet();
122 HttpServletRequest req = mock(HttpServletRequest.class);
123 HttpServletResponse resp = mock(HttpServletResponse.class);
125 when(req.getRequestURI()).thenReturn("/yang-schema/module1");
126 StringWriter out = new StringWriter();
127 ServletOutputStream printOut = new ServletOutputStream() {
130 public void write(int arg0) throws IOException {
134 when(resp.getOutputStream()).thenReturn(printOut);
135 servlet.doGet(req,resp);
136 verify(resp).setStatus(200);
137 verify(resp).setContentType("text/plain");
141 public void testServletBad() throws IOException, ServletException {
142 HelpYangSchemaHttpServlet servlet = new HelpYangSchemaHttpServlet();
143 HttpServletRequest req = mock(HttpServletRequest.class);
144 HttpServletResponse resp = mock(HttpServletResponse.class);
146 when(req.getRequestURI()).thenReturn("/yang-schema/module1/2020-01-01");
147 StringWriter out = new StringWriter();
148 ServletOutputStream printOut = new ServletOutputStream() {
151 public void write(int arg0) throws IOException {
155 when(resp.getOutputStream()).thenReturn(printOut);
156 servlet.doGet(req,resp);
157 verify(resp).sendError(HttpServletResponse.SC_NOT_FOUND);
161 public void testServletNear() throws IOException, ServletException {
162 HelpYangSchemaHttpServlet servlet = new HelpYangSchemaHttpServlet();
163 HttpServletRequest req = mock(HttpServletRequest.class);
164 HttpServletResponse resp = mock(HttpServletResponse.class);
166 when(req.getRequestURI()).thenReturn("/yang-schema/module2/2010-03-01");
167 StringWriter out = new StringWriter();
168 ServletOutputStream printOut = new ServletOutputStream() {
171 public void write(int arg0) throws IOException {
175 when(resp.getOutputStream()).thenReturn(printOut);
176 servlet.doGet(req,resp);
177 verify(resp).setStatus(200);
178 verify(resp).setContentType("text/plain");
181 private static class HelpYangSchemaHttpServlet extends YangSchemaHttpServlet{
186 private static final long serialVersionUID = 1L;
189 public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
190 super.doGet(req, resp);