forked from docker-java/docker-java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJSONTestHelper.java
More file actions
153 lines (140 loc) · 4.88 KB
/
Copy pathJSONTestHelper.java
File metadata and controls
153 lines (140 loc) · 4.88 KB
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/*
* Copyright 2015 Oleg Nenashev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.github.dockerjava.test.serdes;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.dockerjava.core.DockerClientConfig;
import org.apache.commons.io.IOUtils;
import java.io.IOException;
import java.io.InputStream;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
/**
* Provides helper methods for serialization-deserialization tests.
*
* @author Oleg Nenashev
*/
public class JSONTestHelper {
static final ObjectMapper MAPPER;
static {
try {
MAPPER = DockerClientConfig.getDefaultObjectMapper();
} catch (Throwable e) {
e.printStackTrace();
throw e;
}
}
/**
* Reads JSON String from the specified resource
*
* @param resource
* JSON File
* @return JSON String
* @throws IOException
* JSON Conversion error
*/
public static String readString(JSONResourceRef resource) throws IOException {
try (InputStream istream = resource.getResourceClass().getResourceAsStream(resource.getFileName())) {
if (istream == null) {
throw new IOException("Cannot retrieve resource " + resource.getFileName());
}
return IOUtils.toString(istream, "UTF-8");
}
}
/**
* Reads item from the resource.
*
* @param <TClass>
* Data class to be read
* @param resource
* Resource reference
* @param tclass
* Class entry
* @return Item
* @throws IOException
* JSON conversion error
*/
public static <TClass> TClass readObject(JSONResourceRef resource, Class<TClass> tclass) throws IOException {
String str = readString(resource);
return MAPPER.readValue(str, tclass);
}
/**
* Basic serialization-deserialization consistency test for the resource.
*
* @param <TClass>
* Data class
* @param resource
* Resource reference
* @param tclass
* Class entry
* @throws IOException
* JSON conversion error
* @throws AssertionError
* Validation error
* @return Deserialized object after the roundtrip
*/
public static <TClass> TClass testRoundTrip(JSONResourceRef resource, Class<TClass> tclass) throws IOException,
AssertionError {
TClass item = readObject(resource, tclass);
assertNotNull(item);
return testRoundTrip(item, tclass);
}
/**
* Performs roundtrip test for the specified class.
*
* @param <TClass>
* Item class
* @param item
* Item to be checked
* @return Deserialized object after the roundtrip
* @throws IOException
* JSON Conversion error
* @throws AssertionError
* Validation error
*/
@SuppressWarnings("unchecked")
public static <TClass> TClass testRoundTrip(TClass item) throws IOException, AssertionError {
return testRoundTrip(item, (Class<TClass>) item.getClass());
}
/**
* Performs roundtrip test for the specified class.
*
* @param <TClass>
* Item class
* @param item
* Item to be checked
* @param asclass
* Class to be used during conversions
* @return Deserialized object after the roundtrip
* @throws IOException
* JSON Conversion error
* @throws AssertionError
* Validation error
*/
public static <TClass> TClass testRoundTrip(TClass item, Class<TClass> asclass) throws IOException, AssertionError {
String serialized1 = MAPPER.writeValueAsString(item);
JsonNode json1 = MAPPER.readTree(serialized1);
TClass deserialized1 = MAPPER.readValue(serialized1, asclass);
String serialized2 = MAPPER.writeValueAsString(deserialized1);
JsonNode json2 = MAPPER.readTree(serialized2);
TClass deserialized2 = MAPPER.readValue(serialized2, asclass);
assertEquals("JSONs must be equal after the second roundtrip", json2, json1);
return deserialized2;
}
public static ObjectMapper getMapper() {
return MAPPER;
}
}