Skip to content

Package: DeviceManagementKeystoreSteps

DeviceManagementKeystoreSteps

nameinstructionbranchcomplexitylinemethod
DeviceManagementKeystoreSteps(EmbeddedBroker, DBHelper, StepData)
M: 9 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 4 C: 0
0%
M: 1 C: 0
0%
afterScenario()
M: 25 C: 0
0%
M: 6 C: 0
0%
M: 4 C: 0
0%
M: 8 C: 0
0%
M: 1 C: 0
0%
beforeScenario(Scenario)
M: 31 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 9 C: 0
0%
M: 1 C: 0
0%
deleteKeystoreItemWithAlias(String, String)
M: 37 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 7 C: 0
0%
M: 1 C: 0
0%
installKeystoreCertificateWithAlias(String)
M: 49 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 11 C: 0
0%
M: 1 C: 0
0%
installKeystoreKeypairWithAlias(String)
M: 64 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 15 C: 0
0%
M: 1 C: 0
0%
keystoreAreSize(long)
M: 12 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
keystoreCertificateSigningRequestIsReceived()
M: 9 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
keystoreCertificateSigningRequestMatchesExpected()
M: 13 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 5 C: 0
0%
M: 1 C: 0
0%
keystoreItemIsReceived()
M: 9 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
keystoreItemMatchesExpected()
M: 31 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 8 C: 0
0%
M: 1 C: 0
0%
keystoreItemsAreSize(long)
M: 12 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
keystoreItemsReceived()
M: 9 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
keystoreItemsWithAliasHasType(String, String)
M: 23 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 5 C: 0
0%
M: 1 C: 0
0%
keystoreItemsWithAliasIsNotPresent(String)
M: 19 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 4 C: 0
0%
M: 1 C: 0
0%
keystoreItemsWithAliasIsPresent(String)
M: 19 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 4 C: 0
0%
M: 1 C: 0
0%
keystoreItemsWithAliasMatchesCertificate(String)
M: 68 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 15 C: 0
0%
M: 1 C: 0
0%
keystoreItemsWithAliasMatchesKeypair(String)
M: 46 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 10 C: 0
0%
M: 1 C: 0
0%
keystoreNamedHasSize(String, Integer)
M: 23 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 5 C: 0
0%
M: 1 C: 0
0%
keystoreNamedHasType(String, String)
M: 23 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 5 C: 0
0%
M: 1 C: 0
0%
keystoreNamedIsPresent(String)
M: 19 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 4 C: 0
0%
M: 1 C: 0
0%
keystoreReceived()
M: 9 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
keystoreRequested()
M: 44 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 9 C: 0
0%
M: 1 C: 0
0%
lambda$keystoreItemsWithAliasHasType$5(String, DeviceKeystoreItem)
M: 5 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
lambda$keystoreItemsWithAliasIsNotPresent$4(String, DeviceKeystoreItem)
M: 5 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
lambda$keystoreItemsWithAliasIsPresent$3(String, DeviceKeystoreItem)
M: 5 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
lambda$keystoreItemsWithAliasMatchesCertificate$6(String, DeviceKeystoreItem)
M: 5 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
lambda$keystoreItemsWithAliasMatchesKeypair$7(String, DeviceKeystoreItem)
M: 5 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
lambda$keystoreNamedHasSize$2(String, DeviceKeystore)
M: 5 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
lambda$keystoreNamedHasType$1(String, DeviceKeystore)
M: 5 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
lambda$keystoreNamedIsPresent$0(String, DeviceKeystore)
M: 5 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
requestKeystoreItemRequested(String, String)
M: 43 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 8 C: 0
0%
M: 1 C: 0
0%
requestKeystoreItems()
M: 44 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 9 C: 0
0%
M: 1 C: 0
0%
requestKeystoreItemsByAlias(String)
M: 52 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 11 C: 0
0%
M: 1 C: 0
0%
requestKeystoreItemsByKeystoreId(String)
M: 52 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 11 C: 0
0%
M: 1 C: 0
0%
sendCertificateSigningRequestFor(String, String)
M: 58 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 13 C: 0
0%
M: 1 C: 0
0%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2021, 2022 Eurotech and/or its affiliates and others
3: *
4: * This program and the accompanying materials are made
5: * available under the terms of the Eclipse Public License 2.0
6: * which is available at https://www.eclipse.org/legal/epl-2.0/
7: *
8: * SPDX-License-Identifier: EPL-2.0
9: *
10: * Contributors:
11: * Eurotech
12: *******************************************************************************/
13: package org.eclipse.kapua.service.device.registry.steps;
14:
15: import cucumber.api.Scenario;
16: import cucumber.api.java.After;
17: import cucumber.api.java.Before;
18: import cucumber.api.java.en.Then;
19: import cucumber.api.java.en.When;
20: import cucumber.runtime.java.guice.ScenarioScoped;
21: import org.eclipse.kapua.broker.core.setting.BrokerSetting;
22: import org.eclipse.kapua.commons.security.KapuaSecurityUtils;
23: import org.eclipse.kapua.commons.util.xml.JAXBContextProvider;
24: import org.eclipse.kapua.commons.util.xml.XmlUtil;
25: import org.eclipse.kapua.locator.KapuaLocator;
26: import org.eclipse.kapua.qa.common.DBHelper;
27: import org.eclipse.kapua.qa.common.StepData;
28: import org.eclipse.kapua.qa.common.TestBase;
29: import org.eclipse.kapua.qa.common.TestJAXBContextProvider;
30: import org.eclipse.kapua.qa.common.utils.EmbeddedBroker;
31: import org.eclipse.kapua.service.device.management.keystore.DeviceKeystoreManagementFactory;
32: import org.eclipse.kapua.service.device.management.keystore.DeviceKeystoreManagementService;
33: import org.eclipse.kapua.service.device.management.keystore.model.DeviceKeystore;
34: import org.eclipse.kapua.service.device.management.keystore.model.DeviceKeystoreCSR;
35: import org.eclipse.kapua.service.device.management.keystore.model.DeviceKeystoreCSRInfo;
36: import org.eclipse.kapua.service.device.management.keystore.model.DeviceKeystoreCertificate;
37: import org.eclipse.kapua.service.device.management.keystore.model.DeviceKeystoreItem;
38: import org.eclipse.kapua.service.device.management.keystore.model.DeviceKeystoreItemQuery;
39: import org.eclipse.kapua.service.device.management.keystore.model.DeviceKeystoreItems;
40: import org.eclipse.kapua.service.device.management.keystore.model.DeviceKeystoreKeypair;
41: import org.eclipse.kapua.service.device.management.keystore.model.DeviceKeystores;
42: import org.eclipse.kapua.service.device.registry.Device;
43: import org.eclipse.kapua.service.device.registry.DeviceRegistryService;
44:
45: import javax.inject.Inject;
46: import java.util.List;
47:
48: @ScenarioScoped
49: public class DeviceManagementKeystoreSteps extends TestBase {
50:
51: private static final String KEYSTORES = "keystores";
52: private static final String KEYSTORES_ITEMS = "keystoreItems";
53: private static final String KEYSTORES_ITEM = "keystoreItem";
54: private static final String DEVICE_KEYSTORE_KEYPAIR = "deviceKeystoreKeypair";
55: private static final String DEVICE_KEYSTORE_CSR = "deviceKeystoreCSR";
56:
57: private DeviceRegistryService deviceRegistryService;
58:
59: private DeviceKeystoreManagementService deviceKeystoreManagementService;
60: private DeviceKeystoreManagementFactory deviceKeystoreManagementFactory;
61:
62: /**
63: * Scenario scoped step data.
64: */
65: @Inject
66: public DeviceManagementKeystoreSteps(/* dependency */ EmbeddedBroker broker, DBHelper database, StepData stepData) {
67:
68: this.stepData = stepData;
69: this.database = database;
70: }
71:
72: @Before
73: public void beforeScenario(Scenario scenario) {
74:
75: this.scenario = scenario;
76:
77: BrokerSetting.resetInstance();
78:
79: KapuaLocator locator = KapuaLocator.getInstance();
80: deviceRegistryService = locator.getService(DeviceRegistryService.class);
81: deviceKeystoreManagementService = locator.getService(DeviceKeystoreManagementService.class);
82: deviceKeystoreManagementFactory = locator.getFactory(DeviceKeystoreManagementFactory.class);
83:
84: JAXBContextProvider consoleProvider = new TestJAXBContextProvider();
85: XmlUtil.setContextProvider(consoleProvider);
86: }
87:
88: @After
89: public void afterScenario() {
90:
91: List<KuraDevice> kuraDevices = (List<KuraDevice>) stepData.get("KuraDevices");
92:
93:• if (kuraDevices != null) {
94:• for (KuraDevice kuraDevice : kuraDevices) {
95:• if (kuraDevice != null) {
96: kuraDevice.mqttClientDisconnect();
97: }
98: }
99: }
100:
101: KapuaSecurityUtils.clearSession();
102: }
103:
104: @When("^Keystores are requested$")
105: public void keystoreRequested() throws Exception {
106:
107: List<KuraDevice> kuraDevices = (List<KuraDevice>) stepData.get("KuraDevices");
108:
109:• for (KuraDevice kuraDevice : kuraDevices) {
110: Device device = deviceRegistryService.findByClientId(SYS_SCOPE_ID, kuraDevice.getClientId());
111:• if (device != null) {
112: DeviceKeystores deviceKeystores = deviceKeystoreManagementService.getKeystores(device.getScopeId(), device.getId(), null);
113: List<DeviceKeystore> keystores = deviceKeystores.getKeystores();
114: stepData.put(KEYSTORES, keystores);
115: }
116: }
117: }
118:
119: @Then("^Keystores are received$")
120: public void keystoreReceived() {
121: List<DeviceKeystore> deviceKeystores = (List<DeviceKeystore>) stepData.get(KEYSTORES);
122: assertNotNull(deviceKeystores);
123: }
124:
125: @Then("^Keystores are (\\d+)$")
126: public void keystoreAreSize(long size) {
127: List<DeviceKeystore> keystores = (List<DeviceKeystore>) stepData.get(KEYSTORES);
128: assertEquals(size, keystores.size());
129: }
130:
131: @Then("^Keystores has Keystore named \"(.*)\" is present$")
132: public void keystoreNamedIsPresent(String keystoreName) {
133: List<DeviceKeystore> keystores = (List<DeviceKeystore>) stepData.get(KEYSTORES);
134:
135: DeviceKeystore keystore = keystores.stream().filter(k -> k.getId().equals(keystoreName)).findAny().orElse(null);
136: assertNotNull(keystore);
137: }
138:
139: @Then("^Keystores has Keystore named \"(.*)\" has type \"(.*)\"$")
140: public void keystoreNamedHasType(String keystoreName, String keystoreType) {
141: List<DeviceKeystore> keystores = (List<DeviceKeystore>) stepData.get(KEYSTORES);
142:
143: DeviceKeystore keystore = keystores.stream().filter(k -> k.getId().equals(keystoreName)).findAny().orElse(null);
144: assertNotNull(keystore);
145: assertEquals(keystoreType, keystore.getKeystoreType());
146: }
147:
148: @Then("^Keystores has Keystore named \"(.*)\" has size (\\d+)$")
149: public void keystoreNamedHasSize(String keystoreName, Integer keystoreSize) {
150: List<DeviceKeystore> keystores = (List<DeviceKeystore>) stepData.get(KEYSTORES);
151:
152: DeviceKeystore keystore = keystores.stream().filter(k -> k.getId().equals(keystoreName)).findAny().orElse(null);
153: assertNotNull(keystore);
154: assertEquals(keystoreSize, keystore.getSize());
155: }
156:
157: @When("^All Keystore Items are requested$")
158: public void requestKeystoreItems() throws Exception {
159:
160: List<KuraDevice> kuraDevices = (List<KuraDevice>) stepData.get("KuraDevices");
161:
162:• for (KuraDevice kuraDevice : kuraDevices) {
163: Device device = deviceRegistryService.findByClientId(SYS_SCOPE_ID, kuraDevice.getClientId());
164:• if (device != null) {
165: DeviceKeystoreItems keystoreItems = deviceKeystoreManagementService.getKeystoreItems(device.getScopeId(), device.getId(), null);
166: List<DeviceKeystoreItem> keystoreItemList = keystoreItems.getKeystoreItems();
167: stepData.put(KEYSTORES_ITEMS, keystoreItemList);
168: }
169: }
170: }
171:
172: @When("^Keystore Items with alias \"(.*)\" are requested$")
173: public void requestKeystoreItemsByAlias(String alias) throws Exception {
174:
175: List<KuraDevice> kuraDevices = (List<KuraDevice>) stepData.get("KuraDevices");
176:
177:• for (KuraDevice kuraDevice : kuraDevices) {
178: Device device = deviceRegistryService.findByClientId(SYS_SCOPE_ID, kuraDevice.getClientId());
179:• if (device != null) {
180: DeviceKeystoreItemQuery query = deviceKeystoreManagementFactory.newDeviceKeystoreItemQuery();
181: query.setAlias(alias);
182:
183: DeviceKeystoreItems keystoreItems = deviceKeystoreManagementService.getKeystoreItems(device.getScopeId(), device.getId(), query, null);
184: List<DeviceKeystoreItem> keystoreItemList = keystoreItems.getKeystoreItems();
185: stepData.put(KEYSTORES_ITEMS, keystoreItemList);
186: }
187: }
188: }
189:
190: @When("^Keystore Items with keystore id \"(.*)\" are requested$")
191: public void requestKeystoreItemsByKeystoreId(String keystoreId) throws Exception {
192:
193: List<KuraDevice> kuraDevices = (List<KuraDevice>) stepData.get("KuraDevices");
194:
195:• for (KuraDevice kuraDevice : kuraDevices) {
196: Device device = deviceRegistryService.findByClientId(SYS_SCOPE_ID, kuraDevice.getClientId());
197:• if (device != null) {
198: DeviceKeystoreItemQuery query = deviceKeystoreManagementFactory.newDeviceKeystoreItemQuery();
199: query.setKeystoreId(keystoreId);
200:
201: DeviceKeystoreItems keystoreItems = deviceKeystoreManagementService.getKeystoreItems(device.getScopeId(), device.getId(), query, null);
202: List<DeviceKeystoreItem> keystoreItemList = keystoreItems.getKeystoreItems();
203: stepData.put(KEYSTORES_ITEMS, keystoreItemList);
204: }
205: }
206: }
207:
208: @Then("^Keystore Items are received$")
209: public void keystoreItemsReceived() {
210: List<DeviceKeystoreItem> deviceKeystoreItems = (List<DeviceKeystoreItem>) stepData.get(KEYSTORES_ITEMS);
211: assertNotNull(deviceKeystoreItems);
212: }
213:
214: @Then("^Keystore Items are (\\d+)$")
215: public void keystoreItemsAreSize(long size) {
216: List<DeviceKeystoreItem> deviceKeystoreItems = (List<DeviceKeystoreItem>) stepData.get(KEYSTORES_ITEMS);
217: assertEquals(size, deviceKeystoreItems.size());
218: }
219:
220: @Then("^Keystore Items has Item with alias \"(.*)\" is present$")
221: public void keystoreItemsWithAliasIsPresent(String keystoreItemAlias) {
222: List<DeviceKeystoreItem> deviceKeystoreItems = (List<DeviceKeystoreItem>) stepData.get(KEYSTORES_ITEMS);
223:
224: DeviceKeystoreItem keystoreItem = deviceKeystoreItems.stream().filter(k -> k.getAlias().equals(keystoreItemAlias)).findAny().orElse(null);
225: assertNotNull(keystoreItem);
226: }
227:
228: @Then("^Keystore Items has Item with alias \"(.*)\" is not present$")
229: public void keystoreItemsWithAliasIsNotPresent(String keystoreItemAlias) {
230: List<DeviceKeystoreItem> deviceKeystoreItems = (List<DeviceKeystoreItem>) stepData.get(KEYSTORES_ITEMS);
231:
232: DeviceKeystoreItem keystoreItem = deviceKeystoreItems.stream().filter(k -> k.getAlias().equals(keystoreItemAlias)).findAny().orElse(null);
233: assertNull(keystoreItem);
234: }
235:
236: @Then("^Keystore Items has Item with alias \"(.*)\" has type \"(.*)\"$")
237: public void keystoreItemsWithAliasHasType(String keystoreName, String keystoreType) {
238: List<DeviceKeystoreItem> keystoreItems = (List<DeviceKeystoreItem>) stepData.get(KEYSTORES_ITEMS);
239:
240: DeviceKeystoreItem keystoreItem = keystoreItems.stream().filter(k -> k.getAlias().equals(keystoreName)).findAny().orElse(null);
241: assertNotNull(keystoreItem);
242: assertEquals(keystoreType, keystoreItem.getItemType());
243: }
244:
245: @When("^Keystore Item with keystore id \"(.*)\" and alias \"(.*)\" is requested$")
246: public void requestKeystoreItemRequested(String keystoreId, String alias) throws Exception {
247:
248: List<KuraDevice> kuraDevices = (List<KuraDevice>) stepData.get("KuraDevices");
249:
250:• for (KuraDevice kuraDevice : kuraDevices) {
251: Device device = deviceRegistryService.findByClientId(SYS_SCOPE_ID, kuraDevice.getClientId());
252:• if (device != null) {
253: DeviceKeystoreItem keystoreItem = deviceKeystoreManagementService.getKeystoreItem(device.getScopeId(), device.getId(), keystoreId, alias, null);
254: stepData.put(KEYSTORES_ITEM, keystoreItem);
255: }
256: }
257: }
258:
259: @Then("^Keystore Item is received$")
260: public void keystoreItemIsReceived() {
261: DeviceKeystoreItem deviceKeystoreItem = (DeviceKeystoreItem) stepData.get(KEYSTORES_ITEM);
262:
263: assertNotNull(deviceKeystoreItem);
264: }
265:
266: @Then("^Keystore Item matches expected$")
267: public void keystoreItemMatchesExpected() {
268: DeviceKeystoreItem deviceKeystoreItem = (DeviceKeystoreItem) stepData.get(KEYSTORES_ITEM);
269:
270: assertNotNull(deviceKeystoreItem);
271: assertEquals("HttpsKeystore", deviceKeystoreItem.getKeystoreId());
272: assertEquals("localhost", deviceKeystoreItem.getAlias());
273: assertEquals(new Integer(2048), deviceKeystoreItem.getSize());
274: assertEquals("PRIVATE_KEY", deviceKeystoreItem.getItemType());
275: assertNotNull(deviceKeystoreItem.getCertificateChain());
276: }
277:
278: @When("^I install a Keystore Certificate with alias \"(.*)\"$")
279: public void installKeystoreCertificateWithAlias(String alias) throws Exception {
280:
281: List<KuraDevice> kuraDevices = (List<KuraDevice>) stepData.get("KuraDevices");
282:
283:• for (KuraDevice kuraDevice : kuraDevices) {
284: Device device = deviceRegistryService.findByClientId(SYS_SCOPE_ID, kuraDevice.getClientId());
285:• if (device != null) {
286: DeviceKeystoreCertificate deviceKeystoreCertificate = deviceKeystoreManagementFactory.newDeviceKeystoreCertificate();
287: deviceKeystoreCertificate.setAlias(alias);
288: deviceKeystoreCertificate.setKeystoreId("SSLKeystore");
289: deviceKeystoreCertificate.setCertificate("-----BEGIN CERTIFICATE-----\n" +
290: "MIIFVzCCBD+gAwIBAgISA38CzQctm3+HkSyZPnDL8TFsMA0GCSqGSIb3DQEBCwUA\n" +
291: "MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD\n" +
292: "ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xOTA3MTkxMDIxMTdaFw0x\n" +
293: "OTEwMTcxMDIxMTdaMBsxGTAXBgNVBAMTEG1xdHQuZWNsaXBzZS5vcmcwggEiMA0G\n" +
294: "CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQnt6ZBEZ/vDG0JLqVB45lO6xlLazt\n" +
295: "YpEqZlGBket6PtjUGLdE2XivTpjtUkERS1cvPBqT1DH/yEZ1CU7iT/gfZtZotR0c\n" +
296: "qEMogSGkmrN1sAV6Eb+xGT3sPm1WFeKZqKdzAScdULoweUgwbNXa9kAB1uaSYBTe\n" +
297: "cq2ynfxBKWL/7bVtoeXUOyyaiIxVPTYz5XgpjSUB+9ML/v/+084XhIKA/avGPOSi\n" +
298: "RHOB+BsqTGyGhDgAHF+CDrRt8U1preS9AKXUvZ0aQL+djV8Y5nXPQPR8c2wplMwL\n" +
299: "5W/YMrM/dBm64vclKQLVPyEPqMOLMqcf+LkfQi6WOH+JByJfywAlme6jAgMBAAGj\n" +
300: "ggJkMIICYDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsG\n" +
301: "AQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFHc+PmokFlx8Fh/0Lob125ef\n" +
302: "fLNyMB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMG8GCCsGAQUFBwEB\n" +
303: "BGMwYTAuBggrBgEFBQcwAYYiaHR0cDovL29jc3AuaW50LXgzLmxldHNlbmNyeXB0\n" +
304: "Lm9yZzAvBggrBgEFBQcwAoYjaHR0cDovL2NlcnQuaW50LXgzLmxldHNlbmNyeXB0\n" +
305: "Lm9yZy8wGwYDVR0RBBQwEoIQbXF0dC5lY2xpcHNlLm9yZzBMBgNVHSAERTBDMAgG\n" +
306: "BmeBDAECATA3BgsrBgEEAYLfEwEBATAoMCYGCCsGAQUFBwIBFhpodHRwOi8vY3Bz\n" +
307: "LmxldHNlbmNyeXB0Lm9yZzCCAQMGCisGAQQB1nkCBAIEgfQEgfEA7wB2AHR+2oMx\n" +
308: "rTMQkSGcziVPQnDCv/1eQiAIxjc1eeYQe8xWAAABbAn2/p8AAAQDAEcwRQIhAIBl\n" +
309: "IZC2ZCMDs7bkBQN79xNO84VFpe7bQcMeaqHsQH9jAiAYV5kdZBgl17M5RB44NQ+y\n" +
310: "Y/WOF1PWOrNrP3XdeEo7HAB1ACk8UZZUyDlluqpQ/FgH1Ldvv1h6KXLcpMMM9OVF\n" +
311: "R/R4AAABbAn2/o4AAAQDAEYwRAIgNYxfY0bjRfjhXjjAgyPRSLKq4O5tWTd2W4mn\n" +
312: "CpE3aCYCIGeKPyuuo9tvHbyVKF4bsoN76FmnOkdsYE0MCKeKkUOkMA0GCSqGSIb3\n" +
313: "DQEBCwUAA4IBAQCB0ykl1N2U2BMhzFo6dwrECBSFO+ePV2UYGrb+nFunWE4MMKBb\n" +
314: "dyu7dj3cYRAFCM9A3y0H967IcY+h0u9FgZibmNs+y/959wcbr8F1kvgpVKDb1FGs\n" +
315: "cuEArADQd3X+4TMM+IeIlqbGVXv3mYPrsP78LmUXkS7ufhMXsD5GSbSc2Zp4/v0o\n" +
316: "3bsJz6qwzixhqg30tf6siOs9yrpHpPnDnbRrahbwnYTpm6JP0lK53GeFec4ckNi3\n" +
317: "zT5+hEVOZ4JYPb3xVXkzIjSWmnDVbwC9MFtRaER9MhugKmiAp8SRLbylD0GKOhSB\n" +
318: "2BDf6JrzhIddKxQ75KgMZE6FQaC3Bz1DFyrj\n" +
319: "-----END CERTIFICATE-----");
320:
321: deviceKeystoreManagementService.createKeystoreCertificate(device.getScopeId(), device.getId(), deviceKeystoreCertificate, null);
322: }
323: }
324: }
325:
326: @When("^I install a Keystore Keypair with alias \"(.*)\"$")
327: public void installKeystoreKeypairWithAlias(String alias) throws Exception {
328:
329: List<KuraDevice> kuraDevices = (List<KuraDevice>) stepData.get("KuraDevices");
330:
331:• for (KuraDevice kuraDevice : kuraDevices) {
332: Device device = deviceRegistryService.findByClientId(SYS_SCOPE_ID, kuraDevice.getClientId());
333:• if (device != null) {
334: DeviceKeystoreKeypair deviceKeystoreKeypair = deviceKeystoreManagementFactory.newDeviceKeystoreKeypair();
335: deviceKeystoreKeypair.setAlias(alias);
336: deviceKeystoreKeypair.setKeystoreId("SSLKeystore");
337: deviceKeystoreKeypair.setAlgorithm("RSA");
338: deviceKeystoreKeypair.setSize(4096);
339: deviceKeystoreKeypair.setSignatureAlgorithm("SHA256withRSA");
340: deviceKeystoreKeypair.setAttributes("CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US");
341:
342: deviceKeystoreManagementService.createKeystoreKeypair(device.getScopeId(), device.getId(), deviceKeystoreKeypair, null);
343:
344: stepData.put(DEVICE_KEYSTORE_KEYPAIR, deviceKeystoreKeypair);
345: }
346: }
347: }
348:
349: @Then("^Keystore Items has Item with alias \"(.*)\" that matches the installed certificate$")
350: public void keystoreItemsWithAliasMatchesCertificate(String keystoreItemAlias) {
351: List<DeviceKeystoreItem> deviceKeystoreItems = (List<DeviceKeystoreItem>) stepData.get(KEYSTORES_ITEMS);
352:
353: DeviceKeystoreItem keystoreItem = deviceKeystoreItems.stream().filter(k -> k.getAlias().equals(keystoreItemAlias)).findAny().orElse(null);
354: assertNotNull(keystoreItem);
355:
356: assertEquals("SSLKeystore", keystoreItem.getKeystoreId());
357: assertEquals("CN=mqtt.eclipse.org", keystoreItem.getSubjectDN());
358: assertEquals(1, keystoreItem.getSubjectAN().size());
359: assertEquals("CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US", keystoreItem.getIssuer());
360: assertNotNull(keystoreItem.getNotBefore());
361: assertEquals(1563531677000L, keystoreItem.getNotBefore().getTime());
362: assertNotNull(keystoreItem.getNotAfter());
363: assertEquals(1571307677000L, keystoreItem.getNotAfter().getTime());
364: assertEquals("SHA256withRSA", keystoreItem.getAlgorithm());
365: assertEquals(new Integer(2048), keystoreItem.getSize());
366: assertEquals("TRUSTED_CERTIFICATE", keystoreItem.getItemType());
367: }
368:
369: @Then("^Keystore Items has Item with alias \"(.*)\" that matches the installed keypair$")
370: public void keystoreItemsWithAliasMatchesKeypair(String keystoreItemAlias) {
371: List<DeviceKeystoreItem> deviceKeystoreItems = (List<DeviceKeystoreItem>) stepData.get(KEYSTORES_ITEMS);
372:
373: DeviceKeystoreItem keystoreItem = deviceKeystoreItems.stream().filter(k -> k.getAlias().equals(keystoreItemAlias)).findAny().orElse(null);
374: assertNotNull(keystoreItem);
375:
376: DeviceKeystoreKeypair keystoreKeypair = (DeviceKeystoreKeypair) stepData.get(DEVICE_KEYSTORE_KEYPAIR);
377: assertNotNull(keystoreKeypair);
378:
379: assertEquals(keystoreKeypair.getKeystoreId(), keystoreItem.getKeystoreId());
380: assertEquals(keystoreKeypair.getAlgorithm(), keystoreItem.getAlgorithm());
381: assertEquals(keystoreKeypair.getSize(), keystoreItem.getSize());
382: assertEquals("PRIVATE_KEY", keystoreItem.getItemType());
383: }
384:
385: @When("^I delete a Keystore Item from keystore \"(.*)\" with alias \"(.*)\"$")
386: public void deleteKeystoreItemWithAlias(String keystoreId, String alias) throws Exception {
387:
388: List<KuraDevice> kuraDevices = (List<KuraDevice>) stepData.get("KuraDevices");
389:
390:• for (KuraDevice kuraDevice : kuraDevices) {
391: Device device = deviceRegistryService.findByClientId(SYS_SCOPE_ID, kuraDevice.getClientId());
392:• if (device != null) {
393: deviceKeystoreManagementService.deleteKeystoreItem(device.getScopeId(), device.getId(), keystoreId, alias, null);
394: }
395: }
396: }
397:
398: @When("^I send a Certificate Signing Request for Keystore Item with keystore \"(.*)\" and alias \"(.*)\"$")
399: public void sendCertificateSigningRequestFor(String keystoreId, String alias) throws Exception {
400:
401: List<KuraDevice> kuraDevices = (List<KuraDevice>) stepData.get("KuraDevices");
402:
403:• for (KuraDevice kuraDevice : kuraDevices) {
404: Device device = deviceRegistryService.findByClientId(SYS_SCOPE_ID, kuraDevice.getClientId());
405:• if (device != null) {
406: DeviceKeystoreCSRInfo deviceKeystoreCSRInfo = deviceKeystoreManagementFactory.newDeviceKeystoreCSRInfo();
407: deviceKeystoreCSRInfo.setKeystoreId(keystoreId);
408: deviceKeystoreCSRInfo.setAlias(alias);
409: deviceKeystoreCSRInfo.setSignatureAlgorithm("SHA256withRSA");
410: deviceKeystoreCSRInfo.setAttributes("CN=Kura, OU=IoT, O=Eclipse, C=US");
411:
412: DeviceKeystoreCSR deviceKeystoreCSR = deviceKeystoreManagementService.createKeystoreCSR(device.getScopeId(), device.getId(), deviceKeystoreCSRInfo, null);
413: stepData.put(DEVICE_KEYSTORE_CSR, deviceKeystoreCSR);
414: }
415: }
416: }
417:
418: @Then("^The Certificate Signing Request is received$")
419: public void keystoreCertificateSigningRequestIsReceived() {
420: DeviceKeystoreCSR deviceKeystoreCSR = (DeviceKeystoreCSR) stepData.get(DEVICE_KEYSTORE_CSR);
421:
422: assertNotNull(deviceKeystoreCSR);
423: }
424:
425: @Then("^The Certificate Signing Request matches expected")
426: public void keystoreCertificateSigningRequestMatchesExpected() {
427: DeviceKeystoreCSR deviceKeystoreCSR = (DeviceKeystoreCSR) stepData.get(DEVICE_KEYSTORE_CSR);
428:
429: assertNotNull(deviceKeystoreCSR);
430: assertEquals("-----BEGIN CERTIFICATE REQUEST-----\n" +
431: "MIICgTCCAWkCAQAwPDELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VjbGlwc2UxDDAK\n" +
432: "BgNVBAsTA0lvVDENMAsGA1UEAxMES3VyYTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n" +
433: "ADCCAQoCggEBAKpmnJeOJ7wczIMj3nUe+qxAtfJaXhUJkGy+bQuEfSEKRhA9QXAT\n" +
434: "bt6N5alSj9mHb0OcOESBdUEr8vt28d5qHyHUUJ3yOJH3qURGO3He8yqLuUmgMgdK\n" +
435: "Dtp5bGFy5ltW/F+ASB8vJlX2jaC/Tybq8KjPTzVeEIilyQ9LDQMLmH7l+WklkpsK\n" +
436: "LZHF+2fATJK7HISijozZiVfk8EFi5JXbGo9VFlKouwTU3V2NVY9f4cIftPb5pNs2\n" +
437: "lEL+ZkAuaPksHzkI0z+bPwR4+tlMTxgcQE25r7fPK3FYEuOugSV8zGghI1dBDAHx\n" +
438: "eHYVpduJPhz7RtdVw3x7eM7I1C2IrmfHaP0CAwEAAaAAMA0GCSqGSIb3DQEBCwUA\n" +
439: "A4IBAQAC8rvMaHZ+7szRm490O0nOj2wC0yngvciyBvCqEiKGmlOjeXxJAVjTG+r6\n" +
440: "tXe6Jce9weIRdbI0HHVWkNVBX7Z0xjuD/SjrXOKjx1gm1DTbkp97OTBXuPhuiNXq\n" +
441: "Ihvy/j0P/yFRAUP+YRkV6N5OE76fUst/VHUvMWbEEnH9qPGYmSwV4yBgsSRiL4km\n" +
442: "84uuNDaILuCuYqTMtfoPSrfcILrKMfmPRvNE5DNDbk/BsR33zyBXCjnd+/P61sKo\n" +
443: "VSn6maFDBHcZP2jkBOBr8QmW8jt3oR9qWX5LXBpEHkmki8cy6FEhUOGZIuPAd8Rj\n" +
444: "PfZ8kKHpraMQuOeg0ZsZcZzlZsa8\n" +
445: "-----END CERTIFICATE REQUEST-----\n", deviceKeystoreCSR.getSigningRequest());
446: }
447: }