2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.controller.sal.restconf.impl.test;
10 import java.io.BufferedReader;
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;
25 public class ExpressionParserTest {
27 private Collection<File> xmls;
30 public void setup() throws Exception {
31 this.xmls = TestRestconfUtils.loadFiles("/notifications/xml/output/");
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
121 private boolean parser(final String filter, final String fileName) throws Exception {
123 for (final File file : this.xmls) {
124 if (file.getName().equals(fileName)) {
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);
134 return (boolean) m.invoke(listener, readFile(xml));
137 private String readFile(final File xml) throws Exception {
138 final BufferedReader br = new BufferedReader(new FileReader(xml));
140 final StringBuilder sb = new StringBuilder();
141 String line = br.readLine();
143 while (line != null) {
146 line = br.readLine();
148 return sb.toString();