Merge "YANG Model update for A1 Adapter"
[ccsdk/features.git] / sdnr / wt / data-provider / provider / src / test / java / org / onap / ccsdk / features / sdnr / wt / dataprovider / test / TestYangProvider.java
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
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
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
15  * the License.
16  * ============LICENSE_END==========================================================================
17  ******************************************************************************/
18 package org.onap.ccsdk.features.sdnr.wt.dataprovider.test;
19
20 import static org.junit.Assert.*;
21
22 import java.io.File;
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;
34 import java.util.Set;
35
36 import javax.servlet.ServletException;
37 import javax.servlet.ServletOutputStream;
38 import javax.servlet.http.HttpServletRequest;
39 import javax.servlet.http.HttpServletResponse;
40
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;
47
48 import static org.mockito.Mockito.mock;
49 import static org.mockito.Mockito.verify;
50 import static org.mockito.Mockito.when;
51
52 public class TestYangProvider {
53
54         private static final String TESTPATH = "cache/schema/";
55
56
57         @BeforeClass
58         public static void init() {
59                 Set<PosixFilePermission> perms;
60                 FileAttribute<?> attr;
61                 perms     = EnumSet.noneOf(PosixFilePermission.class);
62
63                 perms.add(PosixFilePermission.OWNER_READ);
64                 perms.add(PosixFilePermission.OWNER_WRITE);
65                 perms.add(PosixFilePermission.OWNER_EXECUTE);
66
67                 attr = PosixFilePermissions.asFileAttribute(perms);
68                 try {
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) {
78
79                 }
80         }
81         @AfterClass
82         public static void deinit() {
83                 try {
84                         Files.walk(new File("cache").toPath())
85                       .sorted(Comparator.reverseOrder())
86                       .map(Path::toFile)
87                       .forEach(File::delete);
88                 } catch (IOException e) {
89                         System.err.println(e);
90                 }
91         }
92         @Test
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"));
99         }
100         @Test
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");
117                 assertNull(f3);
118         }
119         @Test
120         public void testServlet() throws IOException, ServletException {
121                 HelpYangSchemaHttpServlet servlet = new HelpYangSchemaHttpServlet();
122                 HttpServletRequest req = mock(HttpServletRequest.class);
123                 HttpServletResponse resp = mock(HttpServletResponse.class);
124
125                 when(req.getRequestURI()).thenReturn("/yang-schema/module1");
126                 StringWriter out = new StringWriter();
127                 ServletOutputStream printOut = new ServletOutputStream() {
128
129                         @Override
130                         public void write(int arg0) throws IOException {
131                                 out.write(arg0);
132                         }
133                 };
134                 when(resp.getOutputStream()).thenReturn(printOut);
135                 servlet.doGet(req,resp);
136                 verify(resp).setStatus(200);
137                 verify(resp).setContentType("text/plain");
138
139         }
140         @Test
141         public void testServletBad() throws IOException, ServletException {
142                 HelpYangSchemaHttpServlet servlet = new HelpYangSchemaHttpServlet();
143                 HttpServletRequest req = mock(HttpServletRequest.class);
144                 HttpServletResponse resp = mock(HttpServletResponse.class);
145
146                 when(req.getRequestURI()).thenReturn("/yang-schema/module1/2020-01-01");
147                 StringWriter out = new StringWriter();
148                 ServletOutputStream printOut = new ServletOutputStream() {
149
150                         @Override
151                         public void write(int arg0) throws IOException {
152                                 out.write(arg0);
153                         }
154                 };
155                 when(resp.getOutputStream()).thenReturn(printOut);
156                 servlet.doGet(req,resp);
157                 verify(resp).sendError(HttpServletResponse.SC_NOT_FOUND);
158
159         }
160         @Test
161         public void testServletNear() throws IOException, ServletException {
162                 HelpYangSchemaHttpServlet servlet = new HelpYangSchemaHttpServlet();
163                 HttpServletRequest req = mock(HttpServletRequest.class);
164                 HttpServletResponse resp = mock(HttpServletResponse.class);
165
166                 when(req.getRequestURI()).thenReturn("/yang-schema/module2/2010-03-01");
167                 StringWriter out = new StringWriter();
168                 ServletOutputStream printOut = new ServletOutputStream() {
169
170                         @Override
171                         public void write(int arg0) throws IOException {
172                                 out.write(arg0);
173                         }
174                 };
175                 when(resp.getOutputStream()).thenReturn(printOut);
176                 servlet.doGet(req,resp);
177                 verify(resp).setStatus(200);
178                 verify(resp).setContentType("text/plain");
179
180         }
181         private static class HelpYangSchemaHttpServlet extends YangSchemaHttpServlet{
182
183                 /**
184                  *
185                  */
186                 private static final long serialVersionUID = 1L;
187
188                 @Override
189                 public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
190                         super.doGet(req, resp);
191                 }
192         }
193
194
195 }