]> git.basschouten.com Git - openhab-addons.git/blob
4c76a12d0f89dc7a4c0a96a1d1767c64e0c38431
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2020 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.junit.Assert.assertThat;
17 import static org.openhab.binding.network.internal.WakeOnLanPacketSender.*;
18
19 import java.util.Arrays;
20
21 import org.junit.Test;
22 import org.openhab.core.util.HexUtils;
23
24 /**
25  * Tests cases for {@link WakeOnLanPacketSender}.
26  *
27  * @author Wouter Born - Initial contribution
28  */
29 public class WakeOnLanPacketSenderTest {
30
31     private void assertValidMagicPacket(byte[] macBytes, byte[] packet) {
32         byte[] prefix = new byte[PREFIX_BYTE_SIZE];
33         Arrays.fill(prefix, (byte) 0xff);
34
35         assertThat(Arrays.copyOfRange(packet, 0, PREFIX_BYTE_SIZE), is(prefix));
36
37         for (int i = PREFIX_BYTE_SIZE; i < MAGIC_PACKET_BYTE_SIZE; i += MAC_BYTE_SIZE) {
38             assertThat(Arrays.copyOfRange(packet, i, i + MAC_BYTE_SIZE), is(macBytes));
39         }
40     }
41
42     @Test
43     public void sendWithColonSeparatedMacAddress() {
44         byte[] actualPacket = new byte[MAGIC_PACKET_BYTE_SIZE];
45
46         WakeOnLanPacketSender sender = new WakeOnLanPacketSender("6f:70:65:6e:48:41",
47                 bytes -> System.arraycopy(bytes, 0, actualPacket, 0, bytes.length));
48
49         sender.sendPacket();
50
51         assertValidMagicPacket(HexUtils.hexToBytes("6f:70:65:6e:48:41", ":"), actualPacket);
52     }
53
54     @Test
55     public void sendWithHyphenSeparatedMacAddress() {
56         byte[] actualPacket = new byte[MAGIC_PACKET_BYTE_SIZE];
57
58         WakeOnLanPacketSender sender = new WakeOnLanPacketSender("6F-70-65-6E-48-41",
59                 bytes -> System.arraycopy(bytes, 0, actualPacket, 0, bytes.length));
60
61         sender.sendPacket();
62
63         assertValidMagicPacket(HexUtils.hexToBytes("6F-70-65-6E-48-41", "-"), actualPacket);
64     }
65
66     @Test
67     public void sendWithNoSeparatedMacAddress() {
68         byte[] actualPacket = new byte[MAGIC_PACKET_BYTE_SIZE];
69
70         WakeOnLanPacketSender sender = new WakeOnLanPacketSender("6f70656e4841",
71                 bytes -> System.arraycopy(bytes, 0, actualPacket, 0, bytes.length));
72
73         sender.sendPacket();
74
75         assertValidMagicPacket(HexUtils.hexToBytes("6f70656e4841"), actualPacket);
76     }
77
78     @Test(expected = IllegalStateException.class, timeout = 10000)
79     public void sendWithEmptyMacAddressThrowsException() {
80         new WakeOnLanPacketSender("").sendPacket();
81     }
82
83     @Test(expected = IllegalStateException.class, timeout = 10000)
84     public void sendWithTooShortMacAddressThrowsException() {
85         new WakeOnLanPacketSender("6f:70:65:6e:48").sendPacket();
86     }
87
88     @Test(expected = IllegalStateException.class, timeout = 10000)
89     public void sendWithTooLongMacAddressThrowsException() {
90         new WakeOnLanPacketSender("6f:70:65:6e:48:41:42").sendPacket();
91     }
92
93     @Test(expected = IllegalStateException.class, timeout = 10000)
94     public void sendWithUnsupportedSeparatorInMacAddressThrowsException() {
95         new WakeOnLanPacketSender("6f=70=65=6e=48=41").sendPacket();
96     }
97 }