Bug 5679 - implement ietf-restconf-monitoring - streams
[netconf.git] / restconf / sal-rest-connector / src / test / java / org / opendaylight / controller / sal / restconf / impl / test / ExpressionParserTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.controller.sal.restconf.impl.test;
9
10 import java.io.BufferedReader;
11 import java.io.File;
12 import java.io.FileReader;
13 import java.lang.reflect.Method;
14 import java.util.Collection;
15 import org.junit.Assert;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.mockito.Mockito;
19 import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils;
20 import org.opendaylight.netconf.sal.streams.listeners.ListenerAdapter;
21 import org.opendaylight.netconf.sal.streams.listeners.Notificator;
22 import org.opendaylight.yang.gen.v1.urn.sal.restconf.event.subscription.rev140708.NotificationOutputTypeGrouping.NotificationOutputType;
23 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
24
25 public class ExpressionParserTest {
26
27     private Collection<File> xmls;
28
29     @Before
30     public void setup() throws Exception {
31         this.xmls = TestRestconfUtils.loadFiles("/notifications/xml/output/");
32     }
33
34     @Test
35     public void trueDownFilterTest() throws Exception {
36         final boolean parser =
37                 parser("notification/data-changed-notification/data-change-event/data/toasterStatus='down'",
38                         "data_change_notification_toaster_status_DOWN.xml");
39         Assert.assertTrue(parser);
40     }
41
42     @Test
43     public void falseDownFilterTest() throws Exception {
44         final boolean parser =
45                 parser("notification/data-changed-notification/data-change-event/data/toasterStatus='up'",
46                         "data_change_notification_toaster_status_DOWN.xml");
47         Assert.assertFalse(parser);
48     }
49
50     @Test
51     public void trueNumberEqualsFilterTest() throws Exception {
52         final boolean parser = parser(
53                 "notification/data-changed-notification/data-change-event/data/toasterStatus=1",
54                 "data_change_notification_toaster_status_NUMBER.xml");
55         Assert.assertTrue(parser);
56     }
57
58     @Test
59     public void falseNumberEqualsFilterTest() throws Exception {
60         final boolean parser = parser("notification/data-changed-notification/data-change-event/data/toasterStatus=0",
61                 "data_change_notification_toaster_status_NUMBER.xml");
62         Assert.assertFalse(parser);
63     }
64
65     @Test
66     public void trueNumberLessFilterTest() throws Exception {
67         final boolean parser = parser("notification/data-changed-notification/data-change-event/data/toasterStatus<2",
68                 "data_change_notification_toaster_status_NUMBER.xml");
69         Assert.assertTrue(parser);
70     }
71
72     @Test
73     public void falseNumberLessFilterTest() throws Exception {
74         final boolean parser = parser("notification/data-changed-notification/data-change-event/data/toasterStatus<0",
75                 "data_change_notification_toaster_status_NUMBER.xml");
76         Assert.assertFalse(parser);
77     }
78
79     @Test
80     public void trueNumberLessEqualsFilterTest() throws Exception {
81         final boolean parser = parser("notification/data-changed-notification/data-change-event/data/toasterStatus<=2",
82                 "data_change_notification_toaster_status_NUMBER.xml");
83         Assert.assertTrue(parser);
84     }
85
86     @Test
87     public void falseNumberLessEqualsFilterTest() throws Exception {
88         final boolean parser = parser("notification/data-changed-notification/data-change-event/data/toasterStatus<=-1",
89                 "data_change_notification_toaster_status_NUMBER.xml");
90         Assert.assertFalse(parser);
91     }
92
93     @Test
94     public void trueNumberGreaterFilterTest() throws Exception {
95         final boolean parser = parser("notification/data-changed-notification/data-change-event/data/toasterStatus>0",
96                 "data_change_notification_toaster_status_NUMBER.xml");
97         Assert.assertTrue(parser);
98     }
99
100     @Test
101     public void falseNumberGreaterFilterTest() throws Exception {
102         final boolean parser = parser("notification/data-changed-notification/data-change-event/data/toasterStatus>5",
103                 "data_change_notification_toaster_status_NUMBER.xml");
104         Assert.assertFalse(parser);
105     }
106
107     @Test
108     public void trueNumberGreaterEqualsFilterTest() throws Exception {
109         final boolean parser = parser("notification/data-changed-notification/data-change-event/data/toasterStatus>=0",
110                 "data_change_notification_toaster_status_NUMBER.xml");
111         Assert.assertTrue(parser);
112     }
113
114     @Test
115     public void falseNumberGreaterEqualsFilterTest() throws Exception {
116         final boolean parser = parser("notification/data-changed-notification/data-change-event/data/toasterStatus>=5",
117                 "data_change_notification_toaster_status_NUMBER.xml");
118         Assert.assertFalse(parser);
119     }
120
121     private boolean parser(final String filter, final String fileName) throws Exception {
122         File xml = null;
123         for (final File file : this.xmls) {
124             if (file.getName().equals(fileName)) {
125                 xml = file;
126             }
127         }
128         final YangInstanceIdentifier path = Mockito.mock(YangInstanceIdentifier.class);
129         final ListenerAdapter listener = Notificator.createListener(path, "streamName", NotificationOutputType.JSON);
130         listener.setQueryParams(null, null, filter);
131         final Method m = listener.getClass().getDeclaredMethod("parseFilterParam", String.class);
132         m.setAccessible(true);
133
134         return (boolean) m.invoke(listener, readFile(xml));
135     }
136
137     private String readFile(final File xml) throws Exception {
138         final BufferedReader br = new BufferedReader(new FileReader(xml));
139         try {
140             final StringBuilder sb = new StringBuilder();
141             String line = br.readLine();
142
143             while (line != null) {
144                 sb.append(line);
145                 sb.append("\n");
146                 line = br.readLine();
147             }
148             return sb.toString();
149         } finally {
150             br.close();
151         }
152     }
153
154 }