a2b90074e3dfe8d8007ecd5e357467d9c859efd4
[ccsdk/features.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * ONAP : ccsdk features
4  * ================================================================================
5  * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
6  * All rights reserved.
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
11  *
12  *     http://www.apache.org/licenses/LICENSE-2.0
13  *
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=========================================================
20  *
21  */
22 package org.onap.ccsdk.features.sdnr.wt.dataprovider.test;
23
24 import static org.junit.Assert.*;
25
26 import java.io.File;
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;
38 import java.util.Set;
39
40 import javax.servlet.ServletException;
41 import javax.servlet.ServletOutputStream;
42 import javax.servlet.http.HttpServletRequest;
43 import javax.servlet.http.HttpServletResponse;
44
45 import org.junit.AfterClass;
46 import org.junit.BeforeClass;
47 import org.junit.Test;
48 import org.onap.ccsdk.features.sdnr.wt.dataprovider.http.yangschema.YangFileProvider;
49 import org.onap.ccsdk.features.sdnr.wt.dataprovider.http.yangschema.YangFilename;
50 import org.onap.ccsdk.features.sdnr.wt.dataprovider.http.yangschema.YangSchemaHttpServlet;
51
52 import static org.mockito.Mockito.mock;
53 import static org.mockito.Mockito.verify;
54 import static org.mockito.Mockito.when;
55
56 public class TestYangProvider {
57
58     private static final String TESTPATH = "cache/schema/";
59
60
61     @BeforeClass
62     public static void init() {
63         Set<PosixFilePermission> perms;
64         FileAttribute<?> attr;
65         perms = EnumSet.noneOf(PosixFilePermission.class);
66
67         perms.add(PosixFilePermission.OWNER_READ);
68         perms.add(PosixFilePermission.OWNER_WRITE);
69         perms.add(PosixFilePermission.OWNER_EXECUTE);
70
71         attr = PosixFilePermissions.asFileAttribute(perms);
72         try {
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) {
82
83         }
84     }
85
86     @AfterClass
87     public static void deinit() {
88         try {
89             Files.walk(new File("cache").toPath()).sorted(Comparator.reverseOrder()).map(Path::toFile)
90                     .forEach(File::delete);
91         } catch (IOException e) {
92             System.err.println(e);
93         }
94     }
95
96     @Test
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"));
103     }
104
105     @Test
106     public void testRevision() throws ParseException {
107         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
108         YangFileProvider provider = new YangFileProvider(TESTPATH);
109         YangFilename f1 = provider.getFileForModule("module1", "2010-01-01");
110         assertEquals("module1", f1.getModule());
111         assertEquals(sdf.parse("2010-01-01"), f1.getRevision());
112         YangFilename f2 = provider.getFileForModule("module2");
113         assertEquals("module2", f2.getModule());
114         assertEquals(sdf.parse("2010-04-01"), f2.getRevision());
115         f2 = provider.getFileForModule("module2", "2010-02-01");
116         assertEquals("module2", f2.getModule());
117         assertEquals(sdf.parse("2010-04-01"), f2.getRevision());
118         YangFilename f3 = provider.getFileForModule("module3");
119         assertEquals("module3", f3.getModule());
120         assertEquals(sdf.parse("2010-01-01"), f3.getRevision());
121         f3 = provider.getFileForModule("module3", "2010-04-01");
122         assertNull(f3);
123     }
124
125     @Test
126     public void testServlet() throws IOException, ServletException {
127         HelpYangSchemaHttpServlet servlet = new HelpYangSchemaHttpServlet();
128         HttpServletRequest req = mock(HttpServletRequest.class);
129         HttpServletResponse resp = mock(HttpServletResponse.class);
130
131         when(req.getRequestURI()).thenReturn("/yang-schema/module1");
132         StringWriter out = new StringWriter();
133         ServletOutputStream printOut = new ServletOutputStream() {
134
135             @Override
136             public void write(int arg0) throws IOException {
137                 out.write(arg0);
138             }
139         };
140         when(resp.getOutputStream()).thenReturn(printOut);
141         servlet.doGet(req, resp);
142         verify(resp).setStatus(200);
143         verify(resp).setContentType("text/plain");
144
145     }
146
147     @Test
148     public void testServletBad() throws IOException, ServletException {
149         HelpYangSchemaHttpServlet servlet = new HelpYangSchemaHttpServlet();
150         HttpServletRequest req = mock(HttpServletRequest.class);
151         HttpServletResponse resp = mock(HttpServletResponse.class);
152
153         when(req.getRequestURI()).thenReturn("/yang-schema/module1/2020-01-01");
154         StringWriter out = new StringWriter();
155         ServletOutputStream printOut = new ServletOutputStream() {
156
157             @Override
158             public void write(int arg0) throws IOException {
159                 out.write(arg0);
160             }
161         };
162         when(resp.getOutputStream()).thenReturn(printOut);
163         servlet.doGet(req, resp);
164         verify(resp).sendError(HttpServletResponse.SC_NOT_FOUND);
165
166     }
167
168     @Test
169     public void testServletNear() throws IOException, ServletException {
170         HelpYangSchemaHttpServlet servlet = new HelpYangSchemaHttpServlet();
171         HttpServletRequest req = mock(HttpServletRequest.class);
172         HttpServletResponse resp = mock(HttpServletResponse.class);
173
174         when(req.getRequestURI()).thenReturn("/yang-schema/module2/2010-03-01");
175         StringWriter out = new StringWriter();
176         ServletOutputStream printOut = new ServletOutputStream() {
177
178             @Override
179             public void write(int arg0) throws IOException {
180                 out.write(arg0);
181             }
182         };
183         when(resp.getOutputStream()).thenReturn(printOut);
184         servlet.doGet(req, resp);
185         verify(resp).setStatus(200);
186         verify(resp).setContentType("text/plain");
187
188     }
189
190     private static class HelpYangSchemaHttpServlet extends YangSchemaHttpServlet {
191
192         /**
193          *
194          */
195         private static final long serialVersionUID = 1L;
196
197         @Override
198         public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
199             super.doGet(req, resp);
200         }
201     }
202
203
204 }