]> git.basschouten.com Git - openhab-addons.git/blob
505c9d0331a6876de4c8249affc70ef78c8abb4f
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2021 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
7  * This program and the accompanying materials are made available under the
8  * terms of the Eclipse Public License 2.0 which is available at
9  * http://www.eclipse.org/legal/epl-2.0
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.network.internal;
14
15 import static org.hamcrest.CoreMatchers.is;
16 import static org.hamcrest.MatcherAssert.assertThat;
17 import static org.junit.jupiter.api.Assertions.assertThrows;
18 import static org.openhab.binding.network.internal.WakeOnLanPacketSender.*;
19
20 import java.util.Arrays;
21 import java.util.concurrent.TimeUnit;
22
23 import org.junit.jupiter.api.Test;
24 import org.junit.jupiter.api.Timeout;
25 import org.openhab.core.util.HexUtils;
26
27 /**
28  * Tests cases for {@link WakeOnLanPacketSender}.
29  *
30  * @author Wouter Born - Initial contribution
31  */
32 @Timeout(value = 10, unit = TimeUnit.SECONDS)
33 public class WakeOnLanPacketSenderTest {
34
35     private void assertValidMagicPacket(byte[] macBytes, byte[] packet) {
36         byte[] prefix = new byte[PREFIX_BYTE_SIZE];
37         Arrays.fill(prefix, (byte) 0xff);
38
39         assertThat(Arrays.copyOfRange(packet, 0, PREFIX_BYTE_SIZE), is(prefix));
40
41         for (int i = PREFIX_BYTE_SIZE; i < MAGIC_PACKET_BYTE_SIZE; i += MAC_BYTE_SIZE) {
42             assertThat(Arrays.copyOfRange(packet, i, i + MAC_BYTE_SIZE), is(macBytes));
43         }
44     }
45
46     @Test
47     public void sendWithColonSeparatedMacAddress() {
48         byte[] actualPacket = new byte[MAGIC_PACKET_BYTE_SIZE];
49
50         WakeOnLanPacketSender sender = new WakeOnLanPacketSender("6f:70:65:6e:48:41",
51                 bytes -> System.arraycopy(bytes, 0, actualPacket, 0, bytes.length));
52
53         sender.sendPacket();
54
55         assertValidMagicPacket(HexUtils.hexToBytes("6f:70:65:6e:48:41", ":"), actualPacket);
56     }
57
58     @Test
59     public void sendWithHyphenSeparatedMacAddress() {
60         byte[] actualPacket = new byte[MAGIC_PACKET_BYTE_SIZE];
61
62         WakeOnLanPacketSender sender = new WakeOnLanPacketSender("6F-70-65-6E-48-41",
63                 bytes -> System.arraycopy(bytes, 0, actualPacket, 0, bytes.length));
64
65         sender.sendPacket();
66
67         assertValidMagicPacket(HexUtils.hexToBytes("6F-70-65-6E-48-41", "-"), actualPacket);
68     }
69
70     @Test
71     public void sendWithNoSeparatedMacAddress() {
72         byte[] actualPacket = new byte[MAGIC_PACKET_BYTE_SIZE];
73
74         WakeOnLanPacketSender sender = new WakeOnLanPacketSender("6f70656e4841",
75                 bytes -> System.arraycopy(bytes, 0, actualPacket, 0, bytes.length));
76
77         sender.sendPacket();
78
79         assertValidMagicPacket(HexUtils.hexToBytes("6f70656e4841"), actualPacket);
80     }
81
82     @Test
83     public void sendWithEmptyMacAddressThrowsException() {
84         assertThrows(IllegalStateException.class, () -> new WakeOnLanPacketSender("").sendPacket());
85     }
86
87     @Test
88     public void sendWithTooShortMacAddressThrowsException() {
89         assertThrows(IllegalStateException.class, () -> new WakeOnLanPacketSender("6f:70:65:6e:48").sendPacket());
90     }
91
92     @Test
93     public void sendWithTooLongMacAddressThrowsException() {
94         assertThrows(IllegalStateException.class, () -> new WakeOnLanPacketSender("6f:70:65:6e:48:41:42").sendPacket());
95     }
96
97     @Test
98     public void sendWithUnsupportedSeparatorInMacAddressThrowsException() {
99         assertThrows(IllegalStateException.class, () -> new WakeOnLanPacketSender("6f=70=65=6e=48=41").sendPacket());
100     }
101 }