f3171d3b1bf6a2cde6522603b0f0d0ee79bb8ec5
[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.assertEquals;
25 import static org.junit.Assert.assertFalse;
26 import static org.junit.Assert.assertNull;
27 import static org.junit.Assert.assertTrue;
28 import static org.mockito.Mockito.mock;
29 import static org.mockito.Mockito.verify;
30 import static org.mockito.Mockito.when;
31 import java.io.File;
32 import java.io.IOException;
33 import java.nio.file.Files;
34 import java.nio.file.Path;
35 import java.nio.file.attribute.FileAttribute;
36 import java.nio.file.attribute.PosixFilePermission;
37 import java.nio.file.attribute.PosixFilePermissions;
38 import java.text.ParseException;
39 import java.text.SimpleDateFormat;
40 import java.util.Comparator;
41 import java.util.EnumSet;
42 import java.util.Set;
43 import javax.servlet.ServletException;
44 import javax.servlet.http.HttpServletRequest;
45 import javax.servlet.http.HttpServletResponse;
46 import org.junit.AfterClass;
47 import org.junit.BeforeClass;
48 import org.junit.Test;
49 import org.onap.ccsdk.features.sdnr.wt.common.test.ServletOutputStreamToStringWriter;
50 import org.onap.ccsdk.features.sdnr.wt.dataprovider.http.yangschema.YangFileProvider;
51 import org.onap.ccsdk.features.sdnr.wt.dataprovider.http.yangschema.YangFilename;
52 import org.onap.ccsdk.features.sdnr.wt.dataprovider.http.yangschema.YangSchemaHttpServlet;
53
54 public class TestYangProvider {
55
56     private static final String TESTPATH = "cache/schema/";
57
58
59     @BeforeClass
60     public static void init() {
61         Set<PosixFilePermission> perms;
62         FileAttribute<?> attr;
63         perms = EnumSet.noneOf(PosixFilePermission.class);
64
65         perms.add(PosixFilePermission.OWNER_READ);
66         perms.add(PosixFilePermission.OWNER_WRITE);
67         perms.add(PosixFilePermission.OWNER_EXECUTE);
68
69         attr = PosixFilePermissions.asFileAttribute(perms);
70         try {
71             Files.createDirectories(new File(TESTPATH).toPath(), attr);
72             new File(TESTPATH + new YangFilename("module1", "2010-01-01").getFilename()).createNewFile();
73             new File(TESTPATH + new YangFilename("module2", "2010-01-01").getFilename()).createNewFile();
74             new File(TESTPATH + new YangFilename("module2", "2010-04-01").getFilename()).createNewFile();
75             new File(TESTPATH + new YangFilename("module3", "2010-01-01").getFilename()).createNewFile();
76             new File(TESTPATH + new YangFilename("module4", "2010-05-01").getFilename()).createNewFile();
77             new File(TESTPATH + new YangFilename("module5", "2010-01-11").getFilename()).createNewFile();
78             new File(TESTPATH + new YangFilename("module6", "2010-01-01").getFilename()).createNewFile();
79         } catch (IOException | ParseException e) {
80
81         }
82     }
83
84     @AfterClass
85     public static void deinit() {
86         try {
87             Files.walk(new File("cache").toPath()).sorted(Comparator.reverseOrder()).map(Path::toFile)
88                     .forEach(File::delete);
89         } catch (IOException e) {
90             System.err.println(e);
91         }
92     }
93
94     @Test
95     public void testExisting() {
96         YangFileProvider provider = new YangFileProvider(TESTPATH);
97         assertTrue(provider.hasFileForModule("module1", "2010-01-01"));
98         assertTrue(provider.hasFileForModule("module2"));
99         assertTrue(provider.hasFileForModule("module3"));
100         assertFalse(provider.hasFileForModule("module5", "2010-01-01"));
101     }
102
103     @Test
104     public void testRevision() throws ParseException {
105         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
106         YangFileProvider provider = new YangFileProvider(TESTPATH);
107         YangFilename f1 = provider.getFileForModule("module1", "2010-01-01");
108         assertEquals("module1", f1.getModule());
109         assertEquals(sdf.parse("2010-01-01"), f1.getRevision());
110         YangFilename f2 = provider.getFileForModule("module2");
111         assertEquals("module2", f2.getModule());
112         assertEquals(sdf.parse("2010-04-01"), f2.getRevision());
113         f2 = provider.getFileForModule("module2", "2010-02-01");
114         assertEquals("module2", f2.getModule());
115         assertEquals(sdf.parse("2010-04-01"), f2.getRevision());
116         YangFilename f3 = provider.getFileForModule("module3");
117         assertEquals("module3", f3.getModule());
118         assertEquals(sdf.parse("2010-01-01"), f3.getRevision());
119         f3 = provider.getFileForModule("module3", "2010-04-01");
120         assertNull(f3);
121     }
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         ServletOutputStreamToStringWriter printOut = new ServletOutputStreamToStringWriter();
131         when(resp.getOutputStream()).thenReturn(printOut);
132         servlet.doGet(req, resp);
133         verify(resp).setStatus(200);
134         verify(resp).setContentType("text/plain");
135
136     }
137
138     @Test
139     public void testServletBad() throws IOException, ServletException {
140         HelpYangSchemaHttpServlet servlet = new HelpYangSchemaHttpServlet();
141         HttpServletRequest req = mock(HttpServletRequest.class);
142         HttpServletResponse resp = mock(HttpServletResponse.class);
143
144         when(req.getRequestURI()).thenReturn("/yang-schema/module1/2020-01-01");
145         ServletOutputStreamToStringWriter printOut = new ServletOutputStreamToStringWriter();
146         when(resp.getOutputStream()).thenReturn(printOut);
147         servlet.doGet(req, resp);
148         verify(resp).sendError(HttpServletResponse.SC_NOT_FOUND);
149
150     }
151
152     @Test
153     public void testServletNear() throws IOException, ServletException {
154         HelpYangSchemaHttpServlet servlet = new HelpYangSchemaHttpServlet();
155         HttpServletRequest req = mock(HttpServletRequest.class);
156         HttpServletResponse resp = mock(HttpServletResponse.class);
157
158         when(req.getRequestURI()).thenReturn("/yang-schema/module2/2010-03-01");
159         ServletOutputStreamToStringWriter printOut = new ServletOutputStreamToStringWriter();
160         when(resp.getOutputStream()).thenReturn(printOut);
161         servlet.doGet(req, resp);
162         verify(resp).setStatus(200);
163         verify(resp).setContentType("text/plain");
164
165     }
166
167     private static class HelpYangSchemaHttpServlet extends YangSchemaHttpServlet {
168
169         /**
170          *
171          */
172         private static final long serialVersionUID = 1L;
173
174         @Override
175         public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
176             super.doGet(req, resp);
177         }
178     }
179
180
181 }