|
| 1 | +/* |
| 2 | + * ***************************************************************************** |
| 3 | + * Copyright (C) 2014-2024 Dennis Sheirer |
| 4 | + * |
| 5 | + * This program is free software: you can redistribute it and/or modify |
| 6 | + * it under the terms of the GNU General Public License as published by |
| 7 | + * the Free Software Foundation, either version 3 of the License, or |
| 8 | + * (at your option) any later version. |
| 9 | + * |
| 10 | + * This program is distributed in the hope that it will be useful, |
| 11 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 13 | + * GNU General Public License for more details. |
| 14 | + * |
| 15 | + * You should have received a copy of the GNU General Public License |
| 16 | + * along with this program. If not, see <http://www.gnu.org/licenses/> |
| 17 | + * **************************************************************************** |
| 18 | + */ |
| 19 | + |
| 20 | +package io.github.dsheirer.alias; |
| 21 | + |
| 22 | +import io.github.dsheirer.alias.id.radio.P25FullyQualifiedRadio; |
| 23 | +import io.github.dsheirer.alias.id.radio.Radio; |
| 24 | +import io.github.dsheirer.alias.id.radio.RadioRange; |
| 25 | +import io.github.dsheirer.alias.id.talkgroup.P25FullyQualifiedTalkgroup; |
| 26 | +import io.github.dsheirer.alias.id.talkgroup.Talkgroup; |
| 27 | +import io.github.dsheirer.alias.id.talkgroup.TalkgroupRange; |
| 28 | +import io.github.dsheirer.identifier.radio.RadioIdentifier; |
| 29 | +import io.github.dsheirer.identifier.talkgroup.TalkgroupIdentifier; |
| 30 | +import io.github.dsheirer.module.decode.p25.identifier.radio.APCO25FullyQualifiedRadioIdentifier; |
| 31 | +import io.github.dsheirer.module.decode.p25.identifier.radio.APCO25RadioIdentifier; |
| 32 | +import io.github.dsheirer.module.decode.p25.identifier.talkgroup.APCO25FullyQualifiedTalkgroupIdentifier; |
| 33 | +import io.github.dsheirer.module.decode.p25.identifier.talkgroup.APCO25Talkgroup; |
| 34 | +import io.github.dsheirer.protocol.Protocol; |
| 35 | +import java.util.List; |
| 36 | +import org.junit.jupiter.api.Test; |
| 37 | + |
| 38 | +import static org.junit.jupiter.api.Assertions.assertEquals; |
| 39 | + |
| 40 | +public class P25AliasTest |
| 41 | +{ |
| 42 | + @Test |
| 43 | + void aliasP25Talkgroup() |
| 44 | + { |
| 45 | + String correctAliasName = "Alias Talkgroup 1"; |
| 46 | + AliasList aliasList = new AliasList("Test Alias List"); |
| 47 | + |
| 48 | + Alias aliasTalkgroup1 = new Alias(); |
| 49 | + aliasTalkgroup1.setName(correctAliasName); |
| 50 | + aliasTalkgroup1.addAliasID(new Talkgroup(Protocol.APCO25, 1)); |
| 51 | + aliasList.addAlias(aliasTalkgroup1); |
| 52 | + |
| 53 | + Alias aliasTalkgroupRange = new Alias(); |
| 54 | + aliasTalkgroupRange.setName("Alias Talkgroup Range"); |
| 55 | + aliasTalkgroupRange.addAliasID(new TalkgroupRange(Protocol.APCO25, 1, 65535)); |
| 56 | + aliasList.addAlias(aliasTalkgroupRange); |
| 57 | + |
| 58 | + TalkgroupIdentifier talkgroupIdentifier1 = APCO25Talkgroup.create(1); |
| 59 | + |
| 60 | + List<Alias> aliases = aliasList.getAliases(talkgroupIdentifier1); |
| 61 | + assertEquals(1, aliases.size(), "Expected 1 matching alias"); |
| 62 | + assertEquals(correctAliasName, aliases.getFirst().getName(), "Unexpected alias name"); |
| 63 | + } |
| 64 | + |
| 65 | + /** |
| 66 | + * Tests that a fully qualified P25 talkgroup aliases correctly when there is a matching fully qualified talkgroup |
| 67 | + * alias ID along with a simple talkgroup that has the same talkgroup value, that is shadowing the fully qualified |
| 68 | + * version. |
| 69 | + */ |
| 70 | + @Test |
| 71 | + void aliasP25FullyQualifiedTalkgroup() |
| 72 | + { |
| 73 | + int wacn = 100; |
| 74 | + int system = 200; |
| 75 | + int originalGroup = 300; |
| 76 | + int aliasGroup = 1; |
| 77 | + String correctAliasName = "Alias Fully Qualified Talkgroup 1"; |
| 78 | + |
| 79 | + AliasList aliasList = new AliasList("Test Alias List"); |
| 80 | + |
| 81 | + Alias aliasTalkgroup1 = new Alias(); |
| 82 | + aliasTalkgroup1.setName("Alias Talkgroup 1"); |
| 83 | + aliasTalkgroup1.addAliasID(new Talkgroup(Protocol.APCO25, aliasGroup)); //Shadows the fully qualified variant |
| 84 | + aliasList.addAlias(aliasTalkgroup1); |
| 85 | + |
| 86 | + Alias aliasFullyQualifiedTalkgroup1 = new Alias(); |
| 87 | + aliasFullyQualifiedTalkgroup1.setName(correctAliasName); |
| 88 | + aliasFullyQualifiedTalkgroup1.addAliasID(new P25FullyQualifiedTalkgroup(wacn, system, originalGroup)); |
| 89 | + aliasList.addAlias(aliasFullyQualifiedTalkgroup1); |
| 90 | + |
| 91 | + //Identifier transmitted over the air that we want to alias |
| 92 | + APCO25FullyQualifiedTalkgroupIdentifier p25FQTG1 = APCO25FullyQualifiedTalkgroupIdentifier.createTo(aliasGroup, wacn, system, originalGroup); |
| 93 | + |
| 94 | + List<Alias> aliases = aliasList.getAliases(p25FQTG1); |
| 95 | + assertEquals(1, aliases.size(), "Expected 1 matching alias"); |
| 96 | + assertEquals(correctAliasName, aliases.getFirst().getName(), "Unexpected alias name"); |
| 97 | + } |
| 98 | + |
| 99 | + /** |
| 100 | + * Tests that a fully qualified P25 talkgroup aliases correctly to a simple talkgroup alias for the local talkgroup |
| 101 | + * value, when the user has not explicitly added a fully qualified talkgroup alias ID.. |
| 102 | + */ |
| 103 | + @Test |
| 104 | + void aliasP25FullyQualifiedTalkgroupToBasicTalkgroupAlias() |
| 105 | + { |
| 106 | + int wacn = 100; |
| 107 | + int system = 200; |
| 108 | + int originalGroup = 300; |
| 109 | + int aliasGroup = 1; |
| 110 | + String correctAliasName = "Alias Talkgroup 1"; |
| 111 | + |
| 112 | + AliasList aliasList = new AliasList("Test Alias List"); |
| 113 | + |
| 114 | + Alias aliasTalkgroup1 = new Alias(); |
| 115 | + aliasTalkgroup1.setName("Alias Talkgroup 1"); |
| 116 | + aliasTalkgroup1.addAliasID(new Talkgroup(Protocol.APCO25, aliasGroup)); |
| 117 | + aliasList.addAlias(aliasTalkgroup1); |
| 118 | + |
| 119 | + //Identifier transmitted over the air that we want to alias |
| 120 | + APCO25FullyQualifiedTalkgroupIdentifier p25FQTG1 = APCO25FullyQualifiedTalkgroupIdentifier.createTo(aliasGroup, wacn, system, originalGroup); |
| 121 | + |
| 122 | + List<Alias> aliases = aliasList.getAliases(p25FQTG1); |
| 123 | + assertEquals(1, aliases.size(), "Expected 1 matching alias"); |
| 124 | + assertEquals(correctAliasName, aliases.getFirst().getName(), "Unexpected alias name"); |
| 125 | + } |
| 126 | + |
| 127 | + /** |
| 128 | + * Tests that a fully qualified P25 talkgroup aliases correctly to a simple talkgroup alias for the local talkgroup |
| 129 | + * value, when the user has not explicitly added a fully qualified talkgroup alias ID.. |
| 130 | + */ |
| 131 | + @Test |
| 132 | + void aliasP25FullyQualifiedTalkgroupToTalkgroupRangeAlias() |
| 133 | + { |
| 134 | + int wacn = 100; |
| 135 | + int system = 200; |
| 136 | + int originalGroup = 300; |
| 137 | + int aliasGroup = 1; |
| 138 | + String correctAliasName = "Alias Talkgroup 1"; |
| 139 | + |
| 140 | + AliasList aliasList = new AliasList("Test Alias List"); |
| 141 | + |
| 142 | + Alias aliasTalkgroupRange = new Alias(); |
| 143 | + aliasTalkgroupRange.setName(correctAliasName); |
| 144 | + aliasTalkgroupRange.addAliasID(new TalkgroupRange(Protocol.APCO25, 1, 0xFFFF)); |
| 145 | + aliasList.addAlias(aliasTalkgroupRange); |
| 146 | + |
| 147 | + //Identifier transmitted over the air that we want to alias |
| 148 | + APCO25FullyQualifiedTalkgroupIdentifier p25FQTG1 = APCO25FullyQualifiedTalkgroupIdentifier.createTo(aliasGroup, wacn, system, originalGroup); |
| 149 | + |
| 150 | + List<Alias> aliases = aliasList.getAliases(p25FQTG1); |
| 151 | + assertEquals(1, aliases.size(), "Expected 1 matching alias"); |
| 152 | + assertEquals(correctAliasName, aliases.getFirst().getName(), "Unexpected alias name"); |
| 153 | + } |
| 154 | + |
| 155 | + @Test |
| 156 | + void aliasP25Radio() |
| 157 | + { |
| 158 | + String correctAliasName = "Alias Radio 1"; |
| 159 | + AliasList aliasList = new AliasList("Test Alias List"); |
| 160 | + |
| 161 | + Alias correctAlias = new Alias(); |
| 162 | + correctAlias.setName(correctAliasName); |
| 163 | + correctAlias.addAliasID(new Radio(Protocol.APCO25, 1)); |
| 164 | + aliasList.addAlias(correctAlias); |
| 165 | + |
| 166 | + Alias aliasRadioRange = new Alias(); |
| 167 | + aliasRadioRange.setName("Alias Radio Range"); |
| 168 | + aliasRadioRange.addAliasID(new RadioRange(Protocol.APCO25, 1, 0xFFFFFF)); |
| 169 | + aliasList.addAlias(aliasRadioRange); |
| 170 | + |
| 171 | + RadioIdentifier radioIdentifier1 = APCO25RadioIdentifier.createFrom(1); |
| 172 | + |
| 173 | + List<Alias> aliases = aliasList.getAliases(radioIdentifier1); |
| 174 | + assertEquals(1, aliases.size(), "Expected 1 matching alias"); |
| 175 | + assertEquals(correctAliasName, aliases.getFirst().getName(), "Unexpected alias name"); |
| 176 | + } |
| 177 | + |
| 178 | + /** |
| 179 | + * Tests that a fully qualified P25 radio aliases correctly when there is a matching fully qualified radio |
| 180 | + * alias ID along with a simple radio that has the same radio value, that is shadowing the fully qualified |
| 181 | + * version. |
| 182 | + */ |
| 183 | + @Test |
| 184 | + void aliasP25FullyQualifiedRadio() |
| 185 | + { |
| 186 | + int wacn = 100; |
| 187 | + int system = 200; |
| 188 | + int originalRadio = 300; |
| 189 | + int aliasRadio = 1; |
| 190 | + String correctAliasName = "Alias Fully Qualified Radio 1"; |
| 191 | + |
| 192 | + AliasList aliasList = new AliasList("Test Alias List"); |
| 193 | + |
| 194 | + Alias aliasRadio1 = new Alias(); |
| 195 | + aliasRadio1.setName("Alias Radio 1"); |
| 196 | + aliasRadio1.addAliasID(new Radio(Protocol.APCO25, aliasRadio)); //Shadows the fully qualified variant |
| 197 | + aliasList.addAlias(aliasRadio1); |
| 198 | + |
| 199 | + Alias aliasFullyQualifiedRadio1 = new Alias(); |
| 200 | + aliasFullyQualifiedRadio1.setName(correctAliasName); |
| 201 | + aliasFullyQualifiedRadio1.addAliasID(new P25FullyQualifiedRadio(wacn, system, originalRadio)); |
| 202 | + aliasList.addAlias(aliasFullyQualifiedRadio1); |
| 203 | + |
| 204 | + //Identifier transmitted over the air that we want to alias |
| 205 | + APCO25FullyQualifiedRadioIdentifier p25FQR1 = APCO25FullyQualifiedRadioIdentifier.createFrom(aliasRadio, wacn, system, originalRadio); |
| 206 | + |
| 207 | + List<Alias> aliases = aliasList.getAliases(p25FQR1); |
| 208 | + assertEquals(1, aliases.size(), "Expected 1 matching alias"); |
| 209 | + assertEquals(correctAliasName, aliases.getFirst().getName(), "Unexpected alias name"); |
| 210 | + } |
| 211 | + |
| 212 | + /** |
| 213 | + * Tests that a fully qualified P25 radio aliases correctly to a simple radio alias for the local radio |
| 214 | + * value, when the user has not explicitly added a fully qualified radio alias ID. |
| 215 | + */ |
| 216 | + @Test |
| 217 | + void aliasP25FullyQualifiedRadioToBasicRadioAlias() |
| 218 | + { |
| 219 | + int wacn = 100; |
| 220 | + int system = 200; |
| 221 | + int originalRadio = 300; |
| 222 | + int aliasRadio = 1; |
| 223 | + String correctAliasName = "Alias Radio 1"; |
| 224 | + |
| 225 | + AliasList aliasList = new AliasList("Test Alias List"); |
| 226 | + |
| 227 | + Alias aliasRadio1 = new Alias(); |
| 228 | + aliasRadio1.setName(correctAliasName); |
| 229 | + aliasRadio1.addAliasID(new Radio(Protocol.APCO25, aliasRadio)); |
| 230 | + aliasList.addAlias(aliasRadio1); |
| 231 | + |
| 232 | + //Identifier transmitted over the air that we want to alias |
| 233 | + APCO25FullyQualifiedRadioIdentifier p25FQTG1 = APCO25FullyQualifiedRadioIdentifier.createFrom(aliasRadio, wacn, system, originalRadio); |
| 234 | + |
| 235 | + List<Alias> aliases = aliasList.getAliases(p25FQTG1); |
| 236 | + assertEquals(1, aliases.size(), "Expected 1 matching alias"); |
| 237 | + assertEquals(correctAliasName, aliases.getFirst().getName(), "Unexpected alias name"); |
| 238 | + } |
| 239 | + |
| 240 | + /** |
| 241 | + * Tests that a fully qualified P25 radio aliases correctly to a radio range alias for the local radio |
| 242 | + * value, when the user has not explicitly added a fully qualified radio alias ID. |
| 243 | + */ |
| 244 | + @Test |
| 245 | + void aliasP25FullyQualifiedRadioToRadioRangeAlias() |
| 246 | + { |
| 247 | + int wacn = 100; |
| 248 | + int system = 200; |
| 249 | + int originalRadio = 300; |
| 250 | + int aliasRadio = 1; |
| 251 | + String correctAliasName = "Alias Radio Range"; |
| 252 | + |
| 253 | + AliasList aliasList = new AliasList("Test Alias List"); |
| 254 | + |
| 255 | + Alias aliasTalkgroup1 = new Alias(); |
| 256 | + aliasTalkgroup1.setName(correctAliasName); |
| 257 | + aliasTalkgroup1.addAliasID(new RadioRange(Protocol.APCO25, 1, 0xFFFFFF)); |
| 258 | + aliasList.addAlias(aliasTalkgroup1); |
| 259 | + |
| 260 | + //Identifier transmitted over the air that we want to alias |
| 261 | + APCO25FullyQualifiedRadioIdentifier p25FQTG1 = APCO25FullyQualifiedRadioIdentifier.createFrom(aliasRadio, wacn, system, originalRadio); |
| 262 | + |
| 263 | + List<Alias> aliases = aliasList.getAliases(p25FQTG1); |
| 264 | + assertEquals(1, aliases.size(), "Expected 1 matching alias"); |
| 265 | + assertEquals(correctAliasName, aliases.getFirst().getName(), "Unexpected alias name"); |
| 266 | + } |
| 267 | +} |
0 commit comments