244d6b053d037c80c08157a9bee8de12834ada92
[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 import static org.mockito.Mockito.mock;
52 import static org.mockito.Mockito.verify;
53 import static org.mockito.Mockito.when;
54
55 public class TestYangProvider {
56
57     private static final String TESTPATH = "cache/schema/";
58
59
60     @BeforeClass
61     public static void init() {
62         Set<PosixFilePermission> perms;
63         FileAttribute<?> attr;
64         perms = EnumSet.noneOf(PosixFilePermission.class);
65
66         perms.add(PosixFilePermission.OWNER_READ);
67         perms.add(PosixFilePermission.OWNER_WRITE);
68         perms.add(PosixFilePermission.OWNER_EXECUTE);
69
70         attr = PosixFilePermissions.asFileAttribute(perms);
71         try {
72             Files.createDirectories(new File(TESTPATH).toPath(), attr);
73             new File(TESTPATH + new YangFilename("module1", "2010-01-01").getFilename()).createNewFile();
74             new File(TESTPATH + new YangFilename("module2", "2010-01-01").getFilename()).createNewFile();
75             new File(TESTPATH + new YangFilename("module2", "2010-04-01").getFilename()).createNewFile();
76             new File(TESTPATH + new YangFilename("module3", "2010-01-01").getFilename()).createNewFile();
77             new File(TESTPATH + new YangFilename("module4", "2010-05-01").getFilename()).createNewFile();
78             new File(TESTPATH + new YangFilename("module5", "2010-01-11").getFilename()).createNewFile();
79             new File(TESTPATH + new YangFilename("module6", "2010-01-01").getFilename()).createNewFile();
80         } catch (IOException | ParseException e) {
81
82         }
83     }
84
85     @AfterClass
86     public static void deinit() {
87         try {
88             Files.walk(new File("cache").toPath()).sorted(Comparator.reverseOrder()).map(Path::toFile)
89                     .forEach(File::delete);
90         } catch (IOException e) {
91             System.err.println(e);
92         }
93     }
94
95     @Test
96     public void testExisting() {
97         YangFileProvider provider = new YangFileProvider(TESTPATH);
98         assertTrue(provider.hasFileForModule("module1", "2010-01-01"));
99         assertTrue(provider.hasFileForModule("module2"));
100         assertTrue(provider.hasFileForModule("module3"));
101         assertFalse(provider.hasFileForModule("module5", "2010-01-01"));
102     }
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
124     @Test
125     public void testServlet() throws IOException, ServletException {
126         HelpYangSchemaHttpServlet servlet = new HelpYangSchemaHttpServlet();
127         HttpServletRequest req = mock(HttpServletRequest.class);
128         HttpServletResponse resp = mock(HttpServletResponse.class);
129
130         when(req.getRequestURI()).thenReturn("/yang-schema/module1");
131         StringWriter out = new StringWriter();
132         ServletOutputStream printOut = new ServletOutputStream() {
133
134             @Override
135             public void write(int arg0) throws IOException {
136                 out.write(arg0);
137             }
138         };
139         when(resp.getOutputStream()).thenReturn(printOut);
140         servlet.doGet(req, resp);
141         verify(resp).setStatus(200);
142         verify(resp).setContentType("text/plain");
143
144     }
145
146     @Test
147     public void testServletBad() throws IOException, ServletException {
148         HelpYangSchemaHttpServlet servlet = new HelpYangSchemaHttpServlet();
149         HttpServletRequest req = mock(HttpServletRequest.class);
150         HttpServletResponse resp = mock(HttpServletResponse.class);
151
152         when(req.getRequestURI()).thenReturn("/yang-schema/module1/2020-01-01");
153         StringWriter out = new StringWriter();
154         ServletOutputStream printOut = new ServletOutputStream() {
155
156             @Override
157             public void write(int arg0) throws IOException {
158                 out.write(arg0);
159             }
160         };
161         when(resp.getOutputStream()).thenReturn(printOut);
162         servlet.doGet(req, resp);
163         verify(resp).sendError(HttpServletResponse.SC_NOT_FOUND);
164
165     }
166
167     @Test
168     public void testServletNear() throws IOException, ServletException {
169         HelpYangSchemaHttpServlet servlet = new HelpYangSchemaHttpServlet();
170         HttpServletRequest req = mock(HttpServletRequest.class);
171         HttpServletResponse resp = mock(HttpServletResponse.class);
172
173         when(req.getRequestURI()).thenReturn("/yang-schema/module2/2010-03-01");
174         StringWriter out = new StringWriter();
175         ServletOutputStream printOut = new ServletOutputStream() {
176
177             @Override
178             public void write(int arg0) throws IOException {
179                 out.write(arg0);
180             }
181         };
182         when(resp.getOutputStream()).thenReturn(printOut);
183         servlet.doGet(req, resp);
184         verify(resp).setStatus(200);
185         verify(resp).setContentType("text/plain");
186
187     }
188
189     private static class HelpYangSchemaHttpServlet extends YangSchemaHttpServlet {
190
191         /**
192          *
193          */
194         private static final long serialVersionUID = 1L;
195
196         @Override
197         public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
198             super.doGet(req, resp);
199         }
200     }
201
202
203 }