7341d5a33049afc7dc88d926f49cf1525f018cc5
[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.data.YangFileProvider;
49 import org.onap.ccsdk.features.sdnr.wt.dataprovider.data.YangFilename;
50 import org.onap.ccsdk.features.sdnr.wt.dataprovider.http.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         @AfterClass
86         public static void deinit() {
87                 try {
88                         Files.walk(new File("cache").toPath())
89                       .sorted(Comparator.reverseOrder())
90                       .map(Path::toFile)
91                       .forEach(File::delete);
92                 } catch (IOException e) {
93                         System.err.println(e);
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         @Test
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");
121                 assertNull(f3);
122         }
123         @Test
124         public void testServlet() throws IOException, ServletException {
125                 HelpYangSchemaHttpServlet servlet = new HelpYangSchemaHttpServlet();
126                 HttpServletRequest req = mock(HttpServletRequest.class);
127                 HttpServletResponse resp = mock(HttpServletResponse.class);
128
129                 when(req.getRequestURI()).thenReturn("/yang-schema/module1");
130                 StringWriter out = new StringWriter();
131                 ServletOutputStream printOut = new ServletOutputStream() {
132
133                         @Override
134                         public void write(int arg0) throws IOException {
135                                 out.write(arg0);
136                         }
137                 };
138                 when(resp.getOutputStream()).thenReturn(printOut);
139                 servlet.doGet(req,resp);
140                 verify(resp).setStatus(200);
141                 verify(resp).setContentType("text/plain");
142
143         }
144         @Test
145         public void testServletBad() throws IOException, ServletException {
146                 HelpYangSchemaHttpServlet servlet = new HelpYangSchemaHttpServlet();
147                 HttpServletRequest req = mock(HttpServletRequest.class);
148                 HttpServletResponse resp = mock(HttpServletResponse.class);
149
150                 when(req.getRequestURI()).thenReturn("/yang-schema/module1/2020-01-01");
151                 StringWriter out = new StringWriter();
152                 ServletOutputStream printOut = new ServletOutputStream() {
153
154                         @Override
155                         public void write(int arg0) throws IOException {
156                                 out.write(arg0);
157                         }
158                 };
159                 when(resp.getOutputStream()).thenReturn(printOut);
160                 servlet.doGet(req,resp);
161                 verify(resp).sendError(HttpServletResponse.SC_NOT_FOUND);
162
163         }
164         @Test
165         public void testServletNear() throws IOException, ServletException {
166                 HelpYangSchemaHttpServlet servlet = new HelpYangSchemaHttpServlet();
167                 HttpServletRequest req = mock(HttpServletRequest.class);
168                 HttpServletResponse resp = mock(HttpServletResponse.class);
169
170                 when(req.getRequestURI()).thenReturn("/yang-schema/module2/2010-03-01");
171                 StringWriter out = new StringWriter();
172                 ServletOutputStream printOut = new ServletOutputStream() {
173
174                         @Override
175                         public void write(int arg0) throws IOException {
176                                 out.write(arg0);
177                         }
178                 };
179                 when(resp.getOutputStream()).thenReturn(printOut);
180                 servlet.doGet(req,resp);
181                 verify(resp).setStatus(200);
182                 verify(resp).setContentType("text/plain");
183
184         }
185         private static class HelpYangSchemaHttpServlet extends YangSchemaHttpServlet{
186
187                 /**
188                  *
189                  */
190                 private static final long serialVersionUID = 1L;
191
192                 @Override
193                 public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
194                         super.doGet(req, resp);
195                 }
196         }
197
198
199 }