Skip to content

Commit bbff079

Browse files
Merge pull request #195 from TariqAbughofa/transit_bulk_api_fix
fixing bulk requests in the transit api
2 parents 8c2a56c + 048f4df commit bbff079

File tree

2 files changed

+163
-0
lines changed

2 files changed

+163
-0
lines changed

src/main/java/com/bettercloud/vault/api/Logical.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.bettercloud.vault.VaultException;
55
import com.bettercloud.vault.json.Json;
66
import com.bettercloud.vault.json.JsonObject;
7+
import com.bettercloud.vault.json.JsonValue;
78
import com.bettercloud.vault.response.LogicalResponse;
89
import com.bettercloud.vault.rest.Rest;
910
import com.bettercloud.vault.rest.RestException;
@@ -243,6 +244,8 @@ private LogicalResponse write(final String path, final Map<String, Object> nameV
243244
requestJson = requestJson.add(pair.getKey(), (Float) pair.getValue());
244245
} else if (value instanceof Double) {
245246
requestJson = requestJson.add(pair.getKey(), (Double) pair.getValue());
247+
} else if (value instanceof JsonValue) {
248+
requestJson = requestJson.add(pair.getKey(), (JsonValue) pair.getValue());
246249
} else {
247250
requestJson = requestJson.add(pair.getKey(), pair.getValue().toString());
248251
}
Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
package com.bettercloud.vault.vault.api;
2+
3+
import com.bettercloud.vault.Vault;
4+
import com.bettercloud.vault.VaultConfig;
5+
import com.bettercloud.vault.json.JsonArray;
6+
import com.bettercloud.vault.json.JsonObject;
7+
import com.bettercloud.vault.response.LogicalResponse;
8+
import com.bettercloud.vault.vault.VaultTestUtils;
9+
import com.bettercloud.vault.vault.mock.MockVault;
10+
import org.eclipse.jetty.server.Server;
11+
import org.junit.After;
12+
import org.junit.Before;
13+
import org.junit.Test;
14+
15+
import java.util.Collections;
16+
import java.util.Optional;
17+
18+
import static org.junit.Assert.assertEquals;
19+
20+
public class TransitApiTest {
21+
22+
private static final String[] PLAIN_DATA = {"MU45MjIyMTM=", "MU45MjIxMTM=", "MA=="};
23+
24+
private static final String[] CIPHER_DATA = {
25+
"1jFhRYWHiddSKgEFyVRpX8ieX7UU+748NBw",
26+
"1jFhRYWHiddSKgEFyVRpX8ieX7UU+748NBw",
27+
"HKecXE3hnGBoAxrfgoD5U0yAvji7b5X6V1fP"
28+
};
29+
30+
private Server server;
31+
private MockVault vaultServer;
32+
33+
public void start(String response) throws Exception {
34+
vaultServer = new MockVault(200, response);
35+
server = VaultTestUtils.initHttpMockVault(vaultServer);
36+
server.start();
37+
}
38+
39+
@After
40+
public void after() throws Exception {
41+
VaultTestUtils.shutdownMockVault(server);
42+
}
43+
44+
@Test
45+
public void testTransitEncrypt() throws Exception {
46+
final JsonObject expectedRequest = new JsonObject()
47+
.add("plaintext", PLAIN_DATA[0]);
48+
final JsonObject expectedResponse = new JsonObject()
49+
.add("data", new JsonObject()
50+
.add("ciphertext", CIPHER_DATA[0]));
51+
52+
start(expectedResponse.toString());
53+
54+
final VaultConfig vaultConfig = new VaultConfig()
55+
.address("http://127.0.0.1:8999")
56+
.build();
57+
final Vault vault = new Vault(vaultConfig, 1);
58+
59+
LogicalResponse response = vault.logical().write("transit/encrypt/test",
60+
Collections.singletonMap("plaintext", PLAIN_DATA[0]));
61+
62+
assertEquals("http://127.0.0.1:8999/v1/transit/encrypt/test", vaultServer.getRequestUrl());
63+
assertEquals(Optional.of(expectedRequest), vaultServer.getRequestBody());
64+
assertEquals(200, response.getRestResponse().getStatus());
65+
}
66+
67+
@Test
68+
public void testTransitDecrypt() throws Exception {
69+
final JsonObject expectedRequest = new JsonObject()
70+
.add("ciphertext", CIPHER_DATA[0]);
71+
final JsonObject expectedResponse = new JsonObject()
72+
.add("data", new JsonObject()
73+
.add("plaintext", PLAIN_DATA[0]));
74+
75+
start(expectedResponse.toString());
76+
77+
final VaultConfig vaultConfig = new VaultConfig()
78+
.address("http://127.0.0.1:8999")
79+
.build();
80+
final Vault vault = new Vault(vaultConfig, 1);
81+
82+
LogicalResponse response = vault.logical().write("transit/decrypt/test",
83+
Collections.singletonMap("ciphertext", CIPHER_DATA[0]));
84+
85+
assertEquals("http://127.0.0.1:8999/v1/transit/decrypt/test", vaultServer.getRequestUrl());
86+
assertEquals(Optional.of(expectedRequest), vaultServer.getRequestBody());
87+
assertEquals(200, response.getRestResponse().getStatus());
88+
}
89+
90+
@Test
91+
public void testBulkTransitEncrypt() throws Exception {
92+
JsonArray batchRequest = new JsonArray();
93+
for (String text : PLAIN_DATA) {
94+
batchRequest.add(new JsonObject().add("plaintext", text));
95+
}
96+
JsonArray batchResponse = new JsonArray();
97+
for (String text : CIPHER_DATA) {
98+
batchResponse.add(new JsonObject().add("ciphertext", text));
99+
}
100+
final JsonObject expectedRequest = new JsonObject()
101+
.add("batch_input", batchRequest);
102+
final JsonObject expectedResponse = new JsonObject()
103+
.add("data", new JsonObject()
104+
.add("batch_results", batchResponse));
105+
106+
start(expectedResponse.toString());
107+
108+
final VaultConfig vaultConfig = new VaultConfig()
109+
.address("http://127.0.0.1:8999")
110+
.build();
111+
final Vault vault = new Vault(vaultConfig, 1);
112+
113+
JsonArray batch = new JsonArray();
114+
for (String text : PLAIN_DATA) {
115+
batch.add(new JsonObject().add("plaintext", text));
116+
}
117+
LogicalResponse response = vault.logical().write("transit/encrypt/test",
118+
Collections.singletonMap("batch_input", batch));
119+
120+
assertEquals(Optional.of(expectedRequest), vaultServer.getRequestBody());
121+
assertEquals("http://127.0.0.1:8999/v1/transit/encrypt/test", vaultServer.getRequestUrl());
122+
assertEquals(200, response.getRestResponse().getStatus());
123+
}
124+
125+
@Test
126+
public void testBulkTransitDecrypt() throws Exception {
127+
JsonArray batchRequest = new JsonArray();
128+
for (String text : CIPHER_DATA) {
129+
batchRequest.add(new JsonObject().add("ciphertext", text));
130+
}
131+
JsonArray batchResponse = new JsonArray();
132+
for (String text : PLAIN_DATA) {
133+
batchResponse.add(new JsonObject().add("plaintext", text));
134+
}
135+
final JsonObject expectedRequest = new JsonObject()
136+
.add("batch_input", batchRequest);
137+
final JsonObject expectedResponse = new JsonObject()
138+
.add("data", new JsonObject()
139+
.add("batch_results", batchResponse));
140+
141+
start(expectedResponse.toString());
142+
143+
final VaultConfig vaultConfig = new VaultConfig()
144+
.address("http://127.0.0.1:8999")
145+
.build();
146+
final Vault vault = new Vault(vaultConfig, 1);
147+
148+
JsonArray batch = new JsonArray();
149+
for (String text : CIPHER_DATA) {
150+
batch.add(new JsonObject().add("ciphertext", text));
151+
}
152+
LogicalResponse response = vault.logical().write("transit/decrypt/test",
153+
Collections.singletonMap("batch_input", batch));
154+
155+
assertEquals(Optional.of(expectedRequest), vaultServer.getRequestBody());
156+
assertEquals("http://127.0.0.1:8999/v1/transit/decrypt/test", vaultServer.getRequestUrl());
157+
assertEquals(200, response.getRestResponse().getStatus());
158+
}
159+
160+
}

0 commit comments

Comments
 (0)