summaryrefslogtreecommitdiffstats
path: root/vdslib/src/test/java/com/yahoo/vdslib/state/DiskStateTestCase.java
blob: bdc3be3dc70d5370f69adac8687bea79e50cd69a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vdslib.state;

import org.junit.Test;

import java.text.ParseException;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

public class DiskStateTestCase {

    private static final double delta = 0.0000000001;

    @Test
    public void testEquals() {
        DiskState d1 = new DiskState(State.UP, "", 1);
        DiskState d2 = new DiskState(State.UP, "", 2);
        DiskState d3 = new DiskState(State.DOWN, "Failed disk", 1);
        DiskState d4 = new DiskState(State.DOWN, "IO error", 1);
        DiskState d5 = new DiskState(State.UP, "", 1);
        DiskState d6 = new DiskState(State.UP, "", 2);
        DiskState d7 = new DiskState(State.DOWN, "Failed disk", 1);
        DiskState d8 = new DiskState(State.DOWN, "IO error", 1);

        assertEquals(d1, d5);
        assertEquals(d2, d6);
        assertEquals(d3, d7);
        assertEquals(d4, d8);

        assertFalse(d1.equals(d2));
        assertFalse(d1.equals(d3));
        assertFalse(d1.equals(d4));

        assertFalse(d2.equals(d1));
        assertFalse(d2.equals(d3));
        assertFalse(d2.equals(d4));

        assertFalse(d3.equals(d1));
        assertFalse(d3.equals(d2));
        assertEquals(d3, d4);

        assertFalse(d4.equals(d1));
        assertFalse(d4.equals(d2));
        assertEquals(d4, d3);

        assertFalse(d1.equals("class not instance of Node"));
    }

    @Test
    public void testSerialization() throws ParseException {
        DiskState d = new DiskState();
        DiskState other = new DiskState(d.serialize("", true));
        assertEquals(d, other);
        assertEquals(d.toString(), other.toString());
        assertEquals(State.UP, other.getState());
        assertEquals(1.0, other.getCapacity(), delta);
        assertEquals("", other.getDescription());
        assertEquals("s:u", d.serialize("", false));
        assertEquals("s:u", d.serialize("", true));
        assertEquals("", d.serialize(".0.", false));
        assertEquals("", d.serialize(".0.", true));

        assertEquals(d, new DiskState(": s:u sbadkey:somevalue cbadkey:somevalue mbadkey:somevalue unknwonkey:somevalue"));

        d = new DiskState(State.UP, "Slow disk", 1.0);
        other = new DiskState(d.serialize("", true));
        assertEquals(d, other);
        assertEquals(d.toString(), other.toString());
        assertEquals(State.UP, other.getState());
        assertEquals(1.0, other.getCapacity(), delta);
        assertEquals("Slow disk", other.getDescription());
        assertEquals("s:u", d.serialize("", false));
        assertEquals("s:u m:Slow\\x20disk", d.serialize("", true));
        assertEquals("", d.serialize(".0.", false));
        assertEquals(".0.m:Slow\\x20disk", d.serialize(".0.", true));

        d = new DiskState(State.DOWN, "Failed disk", 2.0);
        other = new DiskState(d.serialize("", true));
        assertEquals(d, other);
        assertEquals(d.toString(), other.toString());
        assertEquals(State.DOWN, other.getState());
        assertEquals(2.0, other.getCapacity(), delta);
        assertEquals("Failed disk", other.getDescription());
        assertEquals("s:d c:2.0", d.serialize("", false));
        assertEquals("s:d c:2.0 m:Failed\\x20disk", d.serialize("", true));
        assertEquals(".0.s:d .0.c:2.0", d.serialize(".0.", false));
        assertEquals(".0.s:d .0.c:2.0 .0.m:Failed\\x20disk", d.serialize(".0.", true));

        try {
            new DiskState(State.MAINTENANCE);
            assertTrue("Method expected to throw IllegalArgumentException", false);
        } catch (IllegalArgumentException e) {
            assertEquals("State " + State.MAINTENANCE + " is not a valid disk state.", e.getMessage());
        }
        try {
            new DiskState(State.UP, "", -1);
            assertTrue("Method expected to throw IllegalArgumentException", false);
        } catch (IllegalArgumentException e) {
            assertEquals("Negative capacity makes no sense.", e.getMessage());
        }
        try {
            new DiskState("nocolon");
            assertTrue("Method expected to throw ParseException", false);
        } catch (ParseException e) {
            assertEquals("Token nocolon does not contain ':': nocolon", e.getMessage());
        }
        try {
            new DiskState("s:d c:badvalue");
            assertTrue("Method expected to throw ParseException", false);
        } catch (ParseException e) {
            assertEquals("Illegal disk capacity 'badvalue'. Capacity must be a positive floating point number", e.getMessage());
        }
    }
}