kmcpeake | 4fe18c8 | 2015-11-17 20:07:39 +0000 | [diff] [blame] | 1 | /* |
Brian O'Connor | 5ab426f | 2016-04-09 01:19:45 -0700 | [diff] [blame] | 2 | * Copyright 2015-present Open Networking Laboratory |
kmcpeake | 4fe18c8 | 2015-11-17 20:07:39 +0000 | [diff] [blame] | 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | package org.onosproject.faultmanagement.web; |
| 17 | |
| 18 | import org.hamcrest.Description; |
| 19 | import org.hamcrest.TypeSafeDiagnosingMatcher; |
| 20 | import org.onosproject.incubator.net.faultmanagement.alarm.Alarm; |
| 21 | |
| 22 | import com.fasterxml.jackson.databind.JsonNode; |
| 23 | |
| 24 | /** |
| 25 | * Hamcrest matcher for alarms. |
| 26 | */ |
| 27 | public final class AlarmJsonMatcher extends TypeSafeDiagnosingMatcher<JsonNode> { |
| 28 | |
| 29 | private final Alarm alarm; |
| 30 | |
kmcpeake | a540481 | 2015-12-08 11:52:50 +0000 | [diff] [blame] | 31 | private AlarmJsonMatcher(Alarm alarm) { |
kmcpeake | 4fe18c8 | 2015-11-17 20:07:39 +0000 | [diff] [blame] | 32 | this.alarm = alarm; |
| 33 | } |
| 34 | |
| 35 | @Override |
kmcpeake | a540481 | 2015-12-08 11:52:50 +0000 | [diff] [blame] | 36 | public boolean matchesSafely(JsonNode jsonAlarm, Description description) { |
kmcpeake | b172d5f | 2015-12-10 11:30:43 +0000 | [diff] [blame] | 37 | String jsonAlarmId = jsonAlarm.get("id").asText(); |
| 38 | String alarmId = Long.toString(alarm.id().fingerprint()); |
kmcpeake | 4fe18c8 | 2015-11-17 20:07:39 +0000 | [diff] [blame] | 39 | if (!jsonAlarmId.equals(alarmId)) { |
| 40 | description.appendText("alarm id was " + jsonAlarmId); |
| 41 | return false; |
| 42 | } |
| 43 | |
kmcpeake | b172d5f | 2015-12-10 11:30:43 +0000 | [diff] [blame] | 44 | String jsonDeviceId = jsonAlarm.get("deviceId").asText(); |
| 45 | String alarmDeviceId = alarm.deviceId().toString(); |
kmcpeake | 4fe18c8 | 2015-11-17 20:07:39 +0000 | [diff] [blame] | 46 | if (!jsonDeviceId.equals(alarmDeviceId)) { |
| 47 | description.appendText("DeviceId was " + jsonDeviceId); |
| 48 | return false; |
| 49 | } |
| 50 | |
| 51 | |
kmcpeake | b172d5f | 2015-12-10 11:30:43 +0000 | [diff] [blame] | 52 | String jsonDescription = jsonAlarm.get("description").asText(); |
| 53 | String alarmDesc = alarm.description(); |
kmcpeake | 4fe18c8 | 2015-11-17 20:07:39 +0000 | [diff] [blame] | 54 | if (!jsonDescription.equals(alarmDesc)) { |
| 55 | description.appendText("description was " + jsonDescription); |
| 56 | return false; |
| 57 | } |
| 58 | |
kmcpeake | b172d5f | 2015-12-10 11:30:43 +0000 | [diff] [blame] | 59 | long jsonTimeRaised = jsonAlarm.get("timeRaised").asLong(); |
| 60 | long timeRaised = alarm.timeRaised(); |
kmcpeake | 4fe18c8 | 2015-11-17 20:07:39 +0000 | [diff] [blame] | 61 | if (timeRaised != jsonTimeRaised) { |
| 62 | description.appendText("timeRaised was " + jsonTimeRaised); |
| 63 | return false; |
| 64 | } |
| 65 | |
| 66 | |
kmcpeake | b172d5f | 2015-12-10 11:30:43 +0000 | [diff] [blame] | 67 | long jsonTimeUpdated = jsonAlarm.get("timeUpdated").asLong(); |
| 68 | long timeUpdated = alarm.timeUpdated(); |
kmcpeake | 4fe18c8 | 2015-11-17 20:07:39 +0000 | [diff] [blame] | 69 | if (timeUpdated != jsonTimeUpdated) { |
| 70 | description.appendText("timeUpdated was " + jsonTimeUpdated); |
| 71 | return false; |
| 72 | } |
| 73 | |
kmcpeake | b172d5f | 2015-12-10 11:30:43 +0000 | [diff] [blame] | 74 | JsonNode jsonTimeClearedNode = jsonAlarm.get("timeCleared"); |
kmcpeake | 4fe18c8 | 2015-11-17 20:07:39 +0000 | [diff] [blame] | 75 | |
| 76 | if (alarm.timeCleared() != null) { |
kmcpeake | b172d5f | 2015-12-10 11:30:43 +0000 | [diff] [blame] | 77 | Long jsonTimeCleared = jsonTimeClearedNode.longValue(); |
| 78 | Long timeCleared = alarm.timeCleared(); |
kmcpeake | 4fe18c8 | 2015-11-17 20:07:39 +0000 | [diff] [blame] | 79 | |
| 80 | if (!timeCleared.equals(jsonTimeCleared)) { |
| 81 | description.appendText("Time Cleared was " + jsonTimeCleared); |
| 82 | return false; |
| 83 | } |
| 84 | } else { |
| 85 | // No clear time not specified, JSON representation must be empty |
| 86 | if (!jsonTimeClearedNode.isNull()) { |
| 87 | description.appendText("Time Cleared should be null"); |
| 88 | return false; |
| 89 | } |
| 90 | } |
| 91 | |
kmcpeake | b172d5f | 2015-12-10 11:30:43 +0000 | [diff] [blame] | 92 | String jsonSeverity = jsonAlarm.get("severity").asText(); |
| 93 | String severity = alarm.severity().toString(); |
kmcpeake | 4fe18c8 | 2015-11-17 20:07:39 +0000 | [diff] [blame] | 94 | if (!severity.equals(jsonSeverity)) { |
| 95 | description.appendText("severity was " + jsonSeverity); |
| 96 | return false; |
| 97 | } |
| 98 | |
kmcpeake | b172d5f | 2015-12-10 11:30:43 +0000 | [diff] [blame] | 99 | JsonNode jsonAlarmNode = jsonAlarm.get("source"); |
kmcpeake | 4fe18c8 | 2015-11-17 20:07:39 +0000 | [diff] [blame] | 100 | |
| 101 | if (alarm.source() != null) { |
kmcpeake | b172d5f | 2015-12-10 11:30:43 +0000 | [diff] [blame] | 102 | String jsonSource = jsonAlarmNode.textValue(); |
| 103 | String source = alarm.source().toString(); |
kmcpeake | 4fe18c8 | 2015-11-17 20:07:39 +0000 | [diff] [blame] | 104 | |
| 105 | if (!source.equals(jsonSource)) { |
| 106 | description.appendText("source was " + jsonSource); |
| 107 | return false; |
| 108 | } |
| 109 | } else { |
| 110 | // source not specified, JSON representation must be empty |
| 111 | if (!jsonAlarmNode.isNull()) { |
| 112 | description.appendText("source should be null"); |
| 113 | return false; |
| 114 | } |
| 115 | } |
| 116 | |
| 117 | // In progress |
| 118 | return true; |
| 119 | } |
| 120 | |
| 121 | @Override |
kmcpeake | a540481 | 2015-12-08 11:52:50 +0000 | [diff] [blame] | 122 | public void describeTo(Description description) { |
kmcpeake | 4fe18c8 | 2015-11-17 20:07:39 +0000 | [diff] [blame] | 123 | description.appendText(alarm.toString()); |
| 124 | } |
| 125 | |
| 126 | /** |
| 127 | * Factory to allocate a alarm matcher. |
| 128 | * |
| 129 | * @param alarm alarm object we are looking for |
| 130 | * @return matcher |
| 131 | */ |
kmcpeake | a540481 | 2015-12-08 11:52:50 +0000 | [diff] [blame] | 132 | public static AlarmJsonMatcher matchesAlarm(Alarm alarm) { |
kmcpeake | 4fe18c8 | 2015-11-17 20:07:39 +0000 | [diff] [blame] | 133 | return new AlarmJsonMatcher(alarm); |
| 134 | } |
| 135 | } |