Commit 0aa16d28a4ce4106fc9b612c99bfec2264e2d569
Committed by
GitHub
Merge pull request #4339 from thingsboard/lwm2m_add_resourses
Lwm2m add resourses
Showing
7 changed files
with
78 additions
and
45 deletions
@@ -30,6 +30,7 @@ import org.springframework.web.bind.annotation.ResponseBody; | @@ -30,6 +30,7 @@ import org.springframework.web.bind.annotation.ResponseBody; | ||
30 | import org.springframework.web.bind.annotation.RestController; | 30 | import org.springframework.web.bind.annotation.RestController; |
31 | import org.thingsboard.server.common.data.TbResource; | 31 | import org.thingsboard.server.common.data.TbResource; |
32 | import org.thingsboard.server.common.data.TbResourceInfo; | 32 | import org.thingsboard.server.common.data.TbResourceInfo; |
33 | +import org.thingsboard.server.common.data.exception.ThingsboardErrorCode; | ||
33 | import org.thingsboard.server.common.data.exception.ThingsboardException; | 34 | import org.thingsboard.server.common.data.exception.ThingsboardException; |
34 | import org.thingsboard.server.common.data.id.TbResourceId; | 35 | import org.thingsboard.server.common.data.id.TbResourceId; |
35 | import org.thingsboard.server.common.data.lwm2m.LwM2mObject; | 36 | import org.thingsboard.server.common.data.lwm2m.LwM2mObject; |
@@ -41,8 +42,10 @@ import org.thingsboard.server.queue.util.TbCoreComponent; | @@ -41,8 +42,10 @@ import org.thingsboard.server.queue.util.TbCoreComponent; | ||
41 | import org.thingsboard.server.service.security.permission.Operation; | 42 | import org.thingsboard.server.service.security.permission.Operation; |
42 | import org.thingsboard.server.service.security.permission.Resource; | 43 | import org.thingsboard.server.service.security.permission.Resource; |
43 | 44 | ||
45 | +import java.util.ArrayList; | ||
44 | import java.util.Base64; | 46 | import java.util.Base64; |
45 | import java.util.List; | 47 | import java.util.List; |
48 | +import java.util.StringJoiner; | ||
46 | 49 | ||
47 | @Slf4j | 50 | @Slf4j |
48 | @RestController | 51 | @RestController |
@@ -108,13 +111,24 @@ public class TbResourceController extends BaseController { | @@ -108,13 +111,24 @@ public class TbResourceController extends BaseController { | ||
108 | @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") | 111 | @PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')") |
109 | @RequestMapping(value = "/resource", method = RequestMethod.POST) | 112 | @RequestMapping(value = "/resource", method = RequestMethod.POST) |
110 | @ResponseBody | 113 | @ResponseBody |
111 | - public TbResource saveResource(@RequestBody TbResource resource) throws ThingsboardException { | 114 | + public List<TbResource> saveResources(@RequestBody List<TbResource> resources) throws ThingsboardException { |
112 | try { | 115 | try { |
113 | - resource.setTenantId(getTenantId()); | ||
114 | - checkEntity(resource.getId(), resource, Resource.TB_RESOURCE); | ||
115 | - TbResource savedResource = checkNotNull(resourceService.saveResource(resource)); | ||
116 | - tbClusterService.onResourceChange(savedResource, null); | ||
117 | - return savedResource; | 116 | + List<TbResource> addResources = new ArrayList<>(); |
117 | + StringJoiner noSaveResources = new StringJoiner("; "); | ||
118 | + resources.forEach(resource -> { | ||
119 | + try { | ||
120 | + resource.setTenantId(getTenantId()); | ||
121 | + checkEntity(resource.getId(), resource, Resource.TB_RESOURCE); | ||
122 | + addResources.add(addResource(resource)); | ||
123 | + } catch (Exception e) { | ||
124 | + noSaveResources.add(resource.getFileName()); | ||
125 | + log.warn("Fail save resource: [{}]", resource.getFileName(), e); | ||
126 | + } | ||
127 | + }); | ||
128 | + if (noSaveResources.length() > 0) { | ||
129 | + throw new ThingsboardException(String.format("Fail save resource: %s", noSaveResources.toString()), ThingsboardErrorCode.INVALID_ARGUMENTS); | ||
130 | + } | ||
131 | + return addResources; | ||
118 | } catch (Exception e) { | 132 | } catch (Exception e) { |
119 | throw handleException(e); | 133 | throw handleException(e); |
120 | } | 134 | } |
@@ -183,4 +197,11 @@ public class TbResourceController extends BaseController { | @@ -183,4 +197,11 @@ public class TbResourceController extends BaseController { | ||
183 | throw handleException(e); | 197 | throw handleException(e); |
184 | } | 198 | } |
185 | } | 199 | } |
186 | -} | 200 | + |
201 | + private TbResource addResource(TbResource resource) throws Exception { | ||
202 | + checkEntity(resource.getId(), resource, Resource.TB_RESOURCE); | ||
203 | + TbResource savedResource = checkNotNull(resourceService.saveResource(resource)); | ||
204 | + tbClusterService.onResourceChange(savedResource, null); | ||
205 | + return savedResource; | ||
206 | + } | ||
207 | +} |
@@ -596,8 +596,7 @@ transport: | @@ -596,8 +596,7 @@ transport: | ||
596 | timeout: "${LWM2M_TIMEOUT:120000}" | 596 | timeout: "${LWM2M_TIMEOUT:120000}" |
597 | recommended_ciphers: "${LWM2M_RECOMMENDED_CIPHERS:false}" | 597 | recommended_ciphers: "${LWM2M_RECOMMENDED_CIPHERS:false}" |
598 | recommended_supported_groups: "${LWM2M_RECOMMENDED_SUPPORTED_GROUPS:true}" | 598 | recommended_supported_groups: "${LWM2M_RECOMMENDED_SUPPORTED_GROUPS:true}" |
599 | - request_pool_size: "${LWM2M_REQUEST_POOL_SIZE:100}" | ||
600 | - request_error_pool_size: "${LWM2M_REQUEST_ERROR_POOL_SIZE:10}" | 599 | + response_pool_size: "${LWM2M_RESPONSE_POOL_SIZE:100}" |
601 | registered_pool_size: "${LWM2M_REGISTERED_POOL_SIZE:10}" | 600 | registered_pool_size: "${LWM2M_REGISTERED_POOL_SIZE:10}" |
602 | update_registered_pool_size: "${LWM2M_UPDATE_REGISTERED_POOL_SIZE:10}" | 601 | update_registered_pool_size: "${LWM2M_UPDATE_REGISTERED_POOL_SIZE:10}" |
603 | un_registered_pool_size: "${LWM2M_UN_REGISTERED_POOL_SIZE:10}" | 602 | un_registered_pool_size: "${LWM2M_UN_REGISTERED_POOL_SIZE:10}" |
@@ -606,8 +605,7 @@ transport: | @@ -606,8 +605,7 @@ transport: | ||
606 | # To get helps about files format and how to generate it, see: https://github.com/eclipse/leshan/wiki/Credential-files-format | 605 | # To get helps about files format and how to generate it, see: https://github.com/eclipse/leshan/wiki/Credential-files-format |
607 | # Create new X509 Certificates: common/transport/lwm2m/src/main/resources/credentials/shell/lwM2M_credentials.sh | 606 | # Create new X509 Certificates: common/transport/lwm2m/src/main/resources/credentials/shell/lwM2M_credentials.sh |
608 | key_store_type: "${LWM2M_KEYSTORE_TYPE:JKS}" | 607 | key_store_type: "${LWM2M_KEYSTORE_TYPE:JKS}" |
609 | - # key_store_type: "${LWM2M_KEYSTORE_TYPE:PKCS12}" | ||
610 | -# key_store_path_file: "${KEY_STORE_PATH_FILE:/common/transport/lwm2m/src/main/resources/credentials/serverKeyStore.jks" | 608 | + # key_store_path_file: "${KEY_STORE_PATH_FILE:/common/transport/lwm2m/src/main/resources/credentials/serverKeyStore.jks" |
611 | key_store_path_file: "${KEY_STORE_PATH_FILE:}" | 609 | key_store_path_file: "${KEY_STORE_PATH_FILE:}" |
612 | key_store_password: "${LWM2M_KEYSTORE_PASSWORD_SERVER:server_ks_password}" | 610 | key_store_password: "${LWM2M_KEYSTORE_PASSWORD_SERVER:server_ks_password}" |
613 | root_alias: "${LWM2M_SERVER_ROOT_CA:rootca}" | 611 | root_alias: "${LWM2M_SERVER_ROOT_CA:rootca}" |
@@ -626,24 +624,26 @@ transport: | @@ -626,24 +624,26 @@ transport: | ||
626 | # - Elliptic Curve parameters : [secp256r1 [NIST P-256, X9.62 prime256v1] (1.2.840.10045.3.1.7)] | 624 | # - Elliptic Curve parameters : [secp256r1 [NIST P-256, X9.62 prime256v1] (1.2.840.10045.3.1.7)] |
627 | public_x: "${LWM2M_SERVER_PUBLIC_X:05064b9e6762dd8d8b8a52355d7b4d8b9a3d64e6d2ee277d76c248861353f358}" | 625 | public_x: "${LWM2M_SERVER_PUBLIC_X:05064b9e6762dd8d8b8a52355d7b4d8b9a3d64e6d2ee277d76c248861353f358}" |
628 | public_y: "${LWM2M_SERVER_PUBLIC_Y:5eeb1838e4f9e37b31fa347aef5ce3431eb54e0a2506910c5e0298817445721b}" | 626 | public_y: "${LWM2M_SERVER_PUBLIC_Y:5eeb1838e4f9e37b31fa347aef5ce3431eb54e0a2506910c5e0298817445721b}" |
629 | - private_encoded: "${LWM2M_SERVER_PRIVATE_ENCODED:308193020100301306072a8648ce3d020106082a8648ce3d030107047930770201010420dc774b309e547ceb48fee547e104ce201a9c48c449dc5414cd04e7f5cf05f67ba00a06082a8648ce3d030107a1440342000405064b9e6762dd8d8b8a52355d7b4d8b9a3d64e6d2ee277d76c248861353f3585eeb1838e4f9e37b31fa347aef5ce3431eb54e0a2506910c5e0298817445721b}" # Only Certificate_x509: | 627 | + private_encoded: "${LWM2M_SERVER_PRIVATE_ENCODED:308193020100301306072a8648ce3d020106082a8648ce3d030107047930770201010420dc774b309e547ceb48fee547e104ce201a9c48c449dc5414cd04e7f5cf05f67ba00a06082a8648ce3d030107a1440342000405064b9e6762dd8d8b8a52355d7b4d8b9a3d64e6d2ee277d76c248861353f3585eeb1838e4f9e37b31fa347aef5ce3431eb54e0a2506910c5e0298817445721b}" |
628 | + # Only Certificate_x509: | ||
630 | alias: "${LWM2M_KEYSTORE_ALIAS_SERVER:server}" | 629 | alias: "${LWM2M_KEYSTORE_ALIAS_SERVER:server}" |
631 | bootstrap: | 630 | bootstrap: |
632 | - enable: "${LWM2M_BOOTSTRAP_ENABLED:true}" | ||
633 | - id: "${LWM2M_SERVER_ID:111}" | 631 | + enable: "${LWM2M_ENABLED_BS:true}" |
632 | + id: "${LWM2M_SERVER_ID_BS:111}" | ||
634 | bind_address: "${LWM2M_BIND_ADDRESS_BS:0.0.0.0}" | 633 | bind_address: "${LWM2M_BIND_ADDRESS_BS:0.0.0.0}" |
635 | bind_port_no_sec: "${LWM2M_BIND_PORT_NO_SEC_BS:5687}" | 634 | bind_port_no_sec: "${LWM2M_BIND_PORT_NO_SEC_BS:5687}" |
636 | secure: | 635 | secure: |
637 | bind_address_security: "${LWM2M_BIND_ADDRESS_BS:0.0.0.0}" | 636 | bind_address_security: "${LWM2M_BIND_ADDRESS_BS:0.0.0.0}" |
638 | - bind_port_security: "${LWM2M_BIND_PORT_SEC_BS:5688}" | 637 | + bind_port_security: "${LWM2M_BIND_PORT_SECURITY_BS:5688}" |
639 | # Only for RPK: Public & Private Key. If the keystore file is missing or not working | 638 | # Only for RPK: Public & Private Key. If the keystore file is missing or not working |
640 | # - Elliptic Curve parameters : [secp256r1 [NIST P-256, X9.62 prime256v1] (1.2.840.10045.3.1.7)] | 639 | # - Elliptic Curve parameters : [secp256r1 [NIST P-256, X9.62 prime256v1] (1.2.840.10045.3.1.7)] |
641 | # - Public Key (Hex): [3059301306072a8648ce3d020106082a8648ce3d030107034200045017c87a1c1768264656b3b355434b0def6edb8b9bf166a4762d9930cd730f913fc4e61bcd8901ec27c424114c3e887ed372497f0c2cf85839b8443e76988b34] | 640 | # - Public Key (Hex): [3059301306072a8648ce3d020106082a8648ce3d030107034200045017c87a1c1768264656b3b355434b0def6edb8b9bf166a4762d9930cd730f913fc4e61bcd8901ec27c424114c3e887ed372497f0c2cf85839b8443e76988b34] |
642 | # - Private Key (Hex): [308193020100301306072a8648ce3d020106082a8648ce3d0301070479307702010104205ecafd90caa7be45c42e1f3f32571632b8409e6e6249d7124f4ba56fab3c8083a00a06082a8648ce3d030107a144034200045017c87a1c1768264656b3b355434b0def6edb8b9bf166a4762d9930cd730f913fc4e61bcd8901ec27c424114c3e887ed372497f0c2cf85839b8443e76988b34], | 641 | # - Private Key (Hex): [308193020100301306072a8648ce3d020106082a8648ce3d0301070479307702010104205ecafd90caa7be45c42e1f3f32571632b8409e6e6249d7124f4ba56fab3c8083a00a06082a8648ce3d030107a144034200045017c87a1c1768264656b3b355434b0def6edb8b9bf166a4762d9930cd730f913fc4e61bcd8901ec27c424114c3e887ed372497f0c2cf85839b8443e76988b34], |
643 | public_x: "${LWM2M_SERVER_PUBLIC_X_BS:5017c87a1c1768264656b3b355434b0def6edb8b9bf166a4762d9930cd730f91}" | 642 | public_x: "${LWM2M_SERVER_PUBLIC_X_BS:5017c87a1c1768264656b3b355434b0def6edb8b9bf166a4762d9930cd730f91}" |
644 | public_y: "${LWM2M_SERVER_PUBLIC_Y_BS:3fc4e61bcd8901ec27c424114c3e887ed372497f0c2cf85839b8443e76988b34}" | 643 | public_y: "${LWM2M_SERVER_PUBLIC_Y_BS:3fc4e61bcd8901ec27c424114c3e887ed372497f0c2cf85839b8443e76988b34}" |
645 | - private_encoded: "${LWM2M_SERVER_PRIVATE_ENCODED_BS:308193020100301306072a8648ce3d020106082a8648ce3d0301070479307702010104205ecafd90caa7be45c42e1f3f32571632b8409e6e6249d7124f4ba56fab3c8083a00a06082a8648ce3d030107a144034200045017c87a1c1768264656b3b355434b0def6edb8b9bf166a4762d9930cd730f913fc4e61bcd8901ec27c424114c3e887ed372497f0c2cf85839b8443e76988b34}" # Only Certificate_x509: | ||
646 | - alias: "${LWM2M_KEYSTORE_ALIAS_BOOTSTRAP:bootstrap}" | 644 | + private_encoded: "${LWM2M_SERVER_PRIVATE_ENCODED_BS:308193020100301306072a8648ce3d020106082a8648ce3d0301070479307702010104205ecafd90caa7be45c42e1f3f32571632b8409e6e6249d7124f4ba56fab3c8083a00a06082a8648ce3d030107a144034200045017c87a1c1768264656b3b355434b0def6edb8b9bf166a4762d9930cd730f913fc4e61bcd8901ec27c424114c3e887ed372497f0c2cf85839b8443e76988b34}" |
645 | + # Only Certificate_x509: | ||
646 | + alias: "${LWM2M_KEYSTORE_ALIAS_BS:bootstrap}" | ||
647 | # Use redis for Security and Registration stores | 647 | # Use redis for Security and Registration stores |
648 | redis.enabled: "${LWM2M_REDIS_ENABLED:false}" | 648 | redis.enabled: "${LWM2M_REDIS_ENABLED:false}" |
649 | 649 |
@@ -465,6 +465,10 @@ public abstract class AbstractWebTest { | @@ -465,6 +465,10 @@ public abstract class AbstractWebTest { | ||
465 | return readResponse(doPost(urlTemplate, content, params).andExpect(status().isOk()), responseType); | 465 | return readResponse(doPost(urlTemplate, content, params).andExpect(status().isOk()), responseType); |
466 | } | 466 | } |
467 | 467 | ||
468 | + protected <T, R> R doPostWithTypedResponse(String urlTemplate, T content, TypeReference<R> responseType, ResultMatcher resultMatcher, String... params) throws Exception { | ||
469 | + return readResponse(doPost(urlTemplate, content, params).andExpect(resultMatcher), responseType); | ||
470 | + } | ||
471 | + | ||
468 | protected <T> T doPostAsync(String urlTemplate, T content, Class<T> responseClass, ResultMatcher resultMatcher, String... params) throws Exception { | 472 | protected <T> T doPostAsync(String urlTemplate, T content, Class<T> responseClass, ResultMatcher resultMatcher, String... params) throws Exception { |
469 | return readResponse(doPostAsync(urlTemplate, content, DEFAULT_TIMEOUT, params).andExpect(resultMatcher), responseClass); | 473 | return readResponse(doPostAsync(urlTemplate, content, DEFAULT_TIMEOUT, params).andExpect(resultMatcher), responseClass); |
470 | } | 474 | } |
@@ -32,6 +32,7 @@ import org.thingsboard.server.common.data.security.Authority; | @@ -32,6 +32,7 @@ import org.thingsboard.server.common.data.security.Authority; | ||
32 | import java.util.ArrayList; | 32 | import java.util.ArrayList; |
33 | import java.util.Collections; | 33 | import java.util.Collections; |
34 | import java.util.List; | 34 | import java.util.List; |
35 | +import java.util.stream.Collectors; | ||
35 | 36 | ||
36 | import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; | 37 | import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; |
37 | 38 | ||
@@ -79,7 +80,7 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes | @@ -79,7 +80,7 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes | ||
79 | resource.setFileName(DEFAULT_FILE_NAME); | 80 | resource.setFileName(DEFAULT_FILE_NAME); |
80 | resource.setData("Test Data"); | 81 | resource.setData("Test Data"); |
81 | 82 | ||
82 | - TbResource savedResource = doPost("/api/resource", resource, TbResource.class); | 83 | + TbResource savedResource = save(resource); |
83 | 84 | ||
84 | Assert.assertNotNull(savedResource); | 85 | Assert.assertNotNull(savedResource); |
85 | Assert.assertNotNull(savedResource.getId()); | 86 | Assert.assertNotNull(savedResource.getId()); |
@@ -92,7 +93,7 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes | @@ -92,7 +93,7 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes | ||
92 | 93 | ||
93 | savedResource.setTitle("My new resource"); | 94 | savedResource.setTitle("My new resource"); |
94 | 95 | ||
95 | - doPost("/api/resource", savedResource, TbResource.class); | 96 | + save(savedResource); |
96 | 97 | ||
97 | TbResource foundResource = doGet("/api/resource/" + savedResource.getId().getId().toString(), TbResource.class); | 98 | TbResource foundResource = doGet("/api/resource/" + savedResource.getId().getId().toString(), TbResource.class); |
98 | Assert.assertEquals(foundResource.getTitle(), savedResource.getTitle()); | 99 | Assert.assertEquals(foundResource.getTitle(), savedResource.getTitle()); |
@@ -106,10 +107,10 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes | @@ -106,10 +107,10 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes | ||
106 | resource.setFileName(DEFAULT_FILE_NAME); | 107 | resource.setFileName(DEFAULT_FILE_NAME); |
107 | resource.setData("Test Data"); | 108 | resource.setData("Test Data"); |
108 | 109 | ||
109 | - TbResource savedResource = doPost("/api/resource", resource, TbResource.class); | 110 | + TbResource savedResource = save(resource); |
110 | 111 | ||
111 | loginDifferentTenant(); | 112 | loginDifferentTenant(); |
112 | - doPost("/api/resource", savedResource, TbResource.class, status().isForbidden()); | 113 | + doPostWithTypedResponse("/api/resource", Collections.singletonList(savedResource), new TypeReference<>(){}, status().isBadRequest()); |
113 | deleteDifferentTenant(); | 114 | deleteDifferentTenant(); |
114 | } | 115 | } |
115 | 116 | ||
@@ -121,7 +122,7 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes | @@ -121,7 +122,7 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes | ||
121 | resource.setFileName(DEFAULT_FILE_NAME); | 122 | resource.setFileName(DEFAULT_FILE_NAME); |
122 | resource.setData("Test Data"); | 123 | resource.setData("Test Data"); |
123 | 124 | ||
124 | - TbResource savedResource = doPost("/api/resource", resource, TbResource.class); | 125 | + TbResource savedResource = save(resource); |
125 | 126 | ||
126 | TbResource foundResource = doGet("/api/resource/" + savedResource.getId().getId().toString(), TbResource.class); | 127 | TbResource foundResource = doGet("/api/resource/" + savedResource.getId().getId().toString(), TbResource.class); |
127 | Assert.assertNotNull(foundResource); | 128 | Assert.assertNotNull(foundResource); |
@@ -136,7 +137,7 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes | @@ -136,7 +137,7 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes | ||
136 | resource.setFileName(DEFAULT_FILE_NAME); | 137 | resource.setFileName(DEFAULT_FILE_NAME); |
137 | resource.setData("Test Data"); | 138 | resource.setData("Test Data"); |
138 | 139 | ||
139 | - TbResource savedResource = doPost("/api/resource", resource, TbResource.class); | 140 | + TbResource savedResource = save(resource); |
140 | 141 | ||
141 | doDelete("/api/resource/" + savedResource.getId().getId().toString()) | 142 | doDelete("/api/resource/" + savedResource.getId().getId().toString()) |
142 | .andExpect(status().isOk()); | 143 | .andExpect(status().isOk()); |
@@ -147,15 +148,18 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes | @@ -147,15 +148,18 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes | ||
147 | 148 | ||
148 | @Test | 149 | @Test |
149 | public void testFindTenantTbResources() throws Exception { | 150 | public void testFindTenantTbResources() throws Exception { |
150 | - List<TbResourceInfo> resources = new ArrayList<>(); | 151 | + List<TbResource> resourcesToSave = new ArrayList<>(); |
151 | for (int i = 0; i < 173; i++) { | 152 | for (int i = 0; i < 173; i++) { |
152 | TbResource resource = new TbResource(); | 153 | TbResource resource = new TbResource(); |
153 | resource.setTitle("Resource" + i); | 154 | resource.setTitle("Resource" + i); |
154 | resource.setResourceType(ResourceType.JKS); | 155 | resource.setResourceType(ResourceType.JKS); |
155 | resource.setFileName(i + DEFAULT_FILE_NAME); | 156 | resource.setFileName(i + DEFAULT_FILE_NAME); |
156 | resource.setData("Test Data"); | 157 | resource.setData("Test Data"); |
157 | - resources.add(new TbResourceInfo(doPost("/api/resource", resource, TbResource.class))); | 158 | + resourcesToSave.add(resource); |
158 | } | 159 | } |
160 | + | ||
161 | + List<TbResourceInfo> resources =save(resourcesToSave).stream().map(TbResourceInfo::new).collect(Collectors.toList()); | ||
162 | + | ||
159 | List<TbResourceInfo> loadedResources = new ArrayList<>(); | 163 | List<TbResourceInfo> loadedResources = new ArrayList<>(); |
160 | PageLink pageLink = new PageLink(24); | 164 | PageLink pageLink = new PageLink(24); |
161 | PageData<TbResourceInfo> pageData; | 165 | PageData<TbResourceInfo> pageData; |
@@ -186,7 +190,7 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes | @@ -186,7 +190,7 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes | ||
186 | resource.setResourceType(ResourceType.JKS); | 190 | resource.setResourceType(ResourceType.JKS); |
187 | resource.setFileName(i + DEFAULT_FILE_NAME); | 191 | resource.setFileName(i + DEFAULT_FILE_NAME); |
188 | resource.setData("Test Data"); | 192 | resource.setData("Test Data"); |
189 | - resources.add(new TbResourceInfo(doPost("/api/resource", resource, TbResource.class))); | 193 | + resources.add(new TbResourceInfo(save(resource))); |
190 | } | 194 | } |
191 | List<TbResourceInfo> loadedResources = new ArrayList<>(); | 195 | List<TbResourceInfo> loadedResources = new ArrayList<>(); |
192 | PageLink pageLink = new PageLink(24); | 196 | PageLink pageLink = new PageLink(24); |
@@ -236,7 +240,7 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes | @@ -236,7 +240,7 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes | ||
236 | resource.setResourceType(ResourceType.JKS); | 240 | resource.setResourceType(ResourceType.JKS); |
237 | resource.setFileName(i + DEFAULT_FILE_NAME); | 241 | resource.setFileName(i + DEFAULT_FILE_NAME); |
238 | resource.setData("Test Data"); | 242 | resource.setData("Test Data"); |
239 | - expectedResources.add(new TbResourceInfo(doPost("/api/resource", resource, TbResource.class))); | 243 | + expectedResources.add(new TbResourceInfo(save(resource))); |
240 | } | 244 | } |
241 | 245 | ||
242 | loginSysAdmin(); | 246 | loginSysAdmin(); |
@@ -247,7 +251,7 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes | @@ -247,7 +251,7 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes | ||
247 | resource.setResourceType(ResourceType.JKS); | 251 | resource.setResourceType(ResourceType.JKS); |
248 | resource.setFileName(i + DEFAULT_FILE_NAME); | 252 | resource.setFileName(i + DEFAULT_FILE_NAME); |
249 | resource.setData("Test Data"); | 253 | resource.setData("Test Data"); |
250 | - TbResourceInfo savedResource = new TbResourceInfo(doPost("/api/resource", resource, TbResource.class)); | 254 | + TbResourceInfo savedResource = new TbResourceInfo(save(resource)); |
251 | systemResources.add(savedResource); | 255 | systemResources.add(savedResource); |
252 | if (i >= 73) { | 256 | if (i >= 73) { |
253 | expectedResources.add(savedResource); | 257 | expectedResources.add(savedResource); |
@@ -281,4 +285,12 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes | @@ -281,4 +285,12 @@ public abstract class BaseTbResourceControllerTest extends AbstractControllerTes | ||
281 | .andExpect(status().isOk()); | 285 | .andExpect(status().isOk()); |
282 | } | 286 | } |
283 | } | 287 | } |
288 | + | ||
289 | + private TbResource save(TbResource tbResource) throws Exception { | ||
290 | + return save(Collections.singletonList(tbResource)).get(0); | ||
291 | + } | ||
292 | + | ||
293 | + private List<TbResource> save(List<TbResource> tbResources) throws Exception { | ||
294 | + return doPostWithTypedResponse("/api/resource", tbResources, new TypeReference<>(){}); | ||
295 | + } | ||
284 | } | 296 | } |
@@ -101,7 +101,7 @@ public class LwM2mTransportRequest { | @@ -101,7 +101,7 @@ public class LwM2mTransportRequest { | ||
101 | @PostConstruct | 101 | @PostConstruct |
102 | public void init() { | 102 | public void init() { |
103 | this.converter = LwM2mValueConverterImpl.getInstance(); | 103 | this.converter = LwM2mValueConverterImpl.getInstance(); |
104 | - executorResponse = Executors.newFixedThreadPool(this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getRequestPoolSize(), | 104 | + executorResponse = Executors.newFixedThreadPool(this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getResponsePoolSize(), |
105 | new NamedThreadFactory(String.format("LwM2M %s channel response", RESPONSE_CHANNEL))); | 105 | new NamedThreadFactory(String.format("LwM2M %s channel response", RESPONSE_CHANNEL))); |
106 | } | 106 | } |
107 | 107 |
@@ -92,12 +92,8 @@ public class LwM2MTransportConfigServer { | @@ -92,12 +92,8 @@ public class LwM2MTransportConfigServer { | ||
92 | private boolean recommendedSupportedGroups; | 92 | private boolean recommendedSupportedGroups; |
93 | 93 | ||
94 | @Getter | 94 | @Getter |
95 | - @Value("${transport.lwm2m.request_pool_size:}") | ||
96 | - private int requestPoolSize; | ||
97 | - | ||
98 | - @Getter | ||
99 | - @Value("${transport.lwm2m.request_error_pool_size:}") | ||
100 | - private int requestErrorPoolSize; | 95 | + @Value("${transport.lwm2m.response_pool_size:}") |
96 | + private int responsePoolSize; | ||
101 | 97 | ||
102 | @Getter | 98 | @Getter |
103 | @Value("${transport.lwm2m.registered_pool_size:}") | 99 | @Value("${transport.lwm2m.registered_pool_size:}") |
@@ -129,8 +129,7 @@ transport: | @@ -129,8 +129,7 @@ transport: | ||
129 | timeout: "${LWM2M_TIMEOUT:120000}" | 129 | timeout: "${LWM2M_TIMEOUT:120000}" |
130 | recommended_ciphers: "${LWM2M_RECOMMENDED_CIPHERS:false}" | 130 | recommended_ciphers: "${LWM2M_RECOMMENDED_CIPHERS:false}" |
131 | recommended_supported_groups: "${LWM2M_RECOMMENDED_SUPPORTED_GROUPS:true}" | 131 | recommended_supported_groups: "${LWM2M_RECOMMENDED_SUPPORTED_GROUPS:true}" |
132 | - request_pool_size: "${LWM2M_REQUEST_POOL_SIZE:100}" | ||
133 | - request_error_pool_size: "${LWM2M_REQUEST_ERROR_POOL_SIZE:10}" | 132 | + response_pool_size: "${LWM2M_RESPONSE_POOL_SIZE:100}" |
134 | registered_pool_size: "${LWM2M_REGISTERED_POOL_SIZE:10}" | 133 | registered_pool_size: "${LWM2M_REGISTERED_POOL_SIZE:10}" |
135 | update_registered_pool_size: "${LWM2M_UPDATE_REGISTERED_POOL_SIZE:10}" | 134 | update_registered_pool_size: "${LWM2M_UPDATE_REGISTERED_POOL_SIZE:10}" |
136 | un_registered_pool_size: "${LWM2M_UN_REGISTERED_POOL_SIZE:10}" | 135 | un_registered_pool_size: "${LWM2M_UN_REGISTERED_POOL_SIZE:10}" |
@@ -139,8 +138,7 @@ transport: | @@ -139,8 +138,7 @@ transport: | ||
139 | # To get helps about files format and how to generate it, see: https://github.com/eclipse/leshan/wiki/Credential-files-format | 138 | # To get helps about files format and how to generate it, see: https://github.com/eclipse/leshan/wiki/Credential-files-format |
140 | # Create new X509 Certificates: common/transport/lwm2m/src/main/resources/credentials/shell/lwM2M_credentials.sh | 139 | # Create new X509 Certificates: common/transport/lwm2m/src/main/resources/credentials/shell/lwM2M_credentials.sh |
141 | key_store_type: "${LWM2M_KEYSTORE_TYPE:JKS}" | 140 | key_store_type: "${LWM2M_KEYSTORE_TYPE:JKS}" |
142 | - # key_store_type: "${LWM2M_KEYSTORE_TYPE:PKCS12}" | ||
143 | - # key_store_path_file: "${KEY_STORE_PATH_FILE:/transport/lwm2m/src/main/data/credentials/serverKeyStore.jks}" | 141 | + # key_store_path_file: "${KEY_STORE_PATH_FILE:/transport/lwm2m/src/main/data/credentials/serverKeyStore.jks}" |
144 | key_store_path_file: "${KEY_STORE_PATH_FILE:}" | 142 | key_store_path_file: "${KEY_STORE_PATH_FILE:}" |
145 | key_store_password: "${LWM2M_KEYSTORE_PASSWORD_SERVER:server_ks_password}" | 143 | key_store_password: "${LWM2M_KEYSTORE_PASSWORD_SERVER:server_ks_password}" |
146 | root_alias: "${LWM2M_SERVER_ROOT_CA:rootca}" | 144 | root_alias: "${LWM2M_SERVER_ROOT_CA:rootca}" |
@@ -159,24 +157,26 @@ transport: | @@ -159,24 +157,26 @@ transport: | ||
159 | # - Elliptic Curve parameters : [secp256r1 [NIST P-256, X9.62 prime256v1] (1.2.840.10045.3.1.7)] | 157 | # - Elliptic Curve parameters : [secp256r1 [NIST P-256, X9.62 prime256v1] (1.2.840.10045.3.1.7)] |
160 | public_x: "${LWM2M_SERVER_PUBLIC_X:05064b9e6762dd8d8b8a52355d7b4d8b9a3d64e6d2ee277d76c248861353f358}" | 158 | public_x: "${LWM2M_SERVER_PUBLIC_X:05064b9e6762dd8d8b8a52355d7b4d8b9a3d64e6d2ee277d76c248861353f358}" |
161 | public_y: "${LWM2M_SERVER_PUBLIC_Y:5eeb1838e4f9e37b31fa347aef5ce3431eb54e0a2506910c5e0298817445721b}" | 159 | public_y: "${LWM2M_SERVER_PUBLIC_Y:5eeb1838e4f9e37b31fa347aef5ce3431eb54e0a2506910c5e0298817445721b}" |
162 | - private_encoded: "${LWM2M_SERVER_PRIVATE_ENCODED:308193020100301306072a8648ce3d020106082a8648ce3d030107047930770201010420dc774b309e547ceb48fee547e104ce201a9c48c449dc5414cd04e7f5cf05f67ba00a06082a8648ce3d030107a1440342000405064b9e6762dd8d8b8a52355d7b4d8b9a3d64e6d2ee277d76c248861353f3585eeb1838e4f9e37b31fa347aef5ce3431eb54e0a2506910c5e0298817445721b}" # Only Certificate_x509: | 160 | + private_encoded: "${LWM2M_SERVER_PRIVATE_ENCODED:308193020100301306072a8648ce3d020106082a8648ce3d030107047930770201010420dc774b309e547ceb48fee547e104ce201a9c48c449dc5414cd04e7f5cf05f67ba00a06082a8648ce3d030107a1440342000405064b9e6762dd8d8b8a52355d7b4d8b9a3d64e6d2ee277d76c248861353f3585eeb1838e4f9e37b31fa347aef5ce3431eb54e0a2506910c5e0298817445721b}" |
161 | + # Only Certificate_x509: | ||
163 | alias: "${LWM2M_KEYSTORE_ALIAS_SERVER:server}" | 162 | alias: "${LWM2M_KEYSTORE_ALIAS_SERVER:server}" |
164 | bootstrap: | 163 | bootstrap: |
165 | - enable: "${LWM2M_BOOTSTRAP_ENABLED:true}" | ||
166 | - id: "${LWM2M_SERVER_ID:111}" | 164 | + enable: "${LWM2M_ENABLED_BS:true}" |
165 | + id: "${LWM2M_SERVER_ID_BS:111}" | ||
167 | bind_address: "${LWM2M_BIND_ADDRESS_BS:0.0.0.0}" | 166 | bind_address: "${LWM2M_BIND_ADDRESS_BS:0.0.0.0}" |
168 | bind_port_no_sec: "${LWM2M_BIND_PORT_NO_SEC_BS:5687}" | 167 | bind_port_no_sec: "${LWM2M_BIND_PORT_NO_SEC_BS:5687}" |
169 | secure: | 168 | secure: |
170 | bind_address_security: "${LWM2M_BIND_ADDRESS_BS:0.0.0.0}" | 169 | bind_address_security: "${LWM2M_BIND_ADDRESS_BS:0.0.0.0}" |
171 | - bind_port_security: "${LWM2M_BIND_PORT_SEC_BS:5688}" | 170 | + bind_port_security: "${LWM2M_BIND_PORT_SECURITY_BS:5688}" |
172 | # Only for RPK: Public & Private Key. If the keystore file is missing or not working | 171 | # Only for RPK: Public & Private Key. If the keystore file is missing or not working |
173 | # - Elliptic Curve parameters : [secp256r1 [NIST P-256, X9.62 prime256v1] (1.2.840.10045.3.1.7)] | 172 | # - Elliptic Curve parameters : [secp256r1 [NIST P-256, X9.62 prime256v1] (1.2.840.10045.3.1.7)] |
174 | # - Public Key (Hex): [3059301306072a8648ce3d020106082a8648ce3d030107034200045017c87a1c1768264656b3b355434b0def6edb8b9bf166a4762d9930cd730f913fc4e61bcd8901ec27c424114c3e887ed372497f0c2cf85839b8443e76988b34] | 173 | # - Public Key (Hex): [3059301306072a8648ce3d020106082a8648ce3d030107034200045017c87a1c1768264656b3b355434b0def6edb8b9bf166a4762d9930cd730f913fc4e61bcd8901ec27c424114c3e887ed372497f0c2cf85839b8443e76988b34] |
175 | # - Private Key (Hex): [308193020100301306072a8648ce3d020106082a8648ce3d0301070479307702010104205ecafd90caa7be45c42e1f3f32571632b8409e6e6249d7124f4ba56fab3c8083a00a06082a8648ce3d030107a144034200045017c87a1c1768264656b3b355434b0def6edb8b9bf166a4762d9930cd730f913fc4e61bcd8901ec27c424114c3e887ed372497f0c2cf85839b8443e76988b34], | 174 | # - Private Key (Hex): [308193020100301306072a8648ce3d020106082a8648ce3d0301070479307702010104205ecafd90caa7be45c42e1f3f32571632b8409e6e6249d7124f4ba56fab3c8083a00a06082a8648ce3d030107a144034200045017c87a1c1768264656b3b355434b0def6edb8b9bf166a4762d9930cd730f913fc4e61bcd8901ec27c424114c3e887ed372497f0c2cf85839b8443e76988b34], |
176 | public_x: "${LWM2M_SERVER_PUBLIC_X_BS:5017c87a1c1768264656b3b355434b0def6edb8b9bf166a4762d9930cd730f91}" | 175 | public_x: "${LWM2M_SERVER_PUBLIC_X_BS:5017c87a1c1768264656b3b355434b0def6edb8b9bf166a4762d9930cd730f91}" |
177 | public_y: "${LWM2M_SERVER_PUBLIC_Y_BS:3fc4e61bcd8901ec27c424114c3e887ed372497f0c2cf85839b8443e76988b34}" | 176 | public_y: "${LWM2M_SERVER_PUBLIC_Y_BS:3fc4e61bcd8901ec27c424114c3e887ed372497f0c2cf85839b8443e76988b34}" |
178 | - private_encoded: "${LWM2M_SERVER_PRIVATE_ENCODED_BS:308193020100301306072a8648ce3d020106082a8648ce3d0301070479307702010104205ecafd90caa7be45c42e1f3f32571632b8409e6e6249d7124f4ba56fab3c8083a00a06082a8648ce3d030107a144034200045017c87a1c1768264656b3b355434b0def6edb8b9bf166a4762d9930cd730f913fc4e61bcd8901ec27c424114c3e887ed372497f0c2cf85839b8443e76988b34}" # Only Certificate_x509: | ||
179 | - alias: "${LWM2M_KEYSTORE_ALIAS_BOOTSTRAP:bootstrap}" | 177 | + private_encoded: "${LWM2M_SERVER_PRIVATE_ENCODED_BS:308193020100301306072a8648ce3d020106082a8648ce3d0301070479307702010104205ecafd90caa7be45c42e1f3f32571632b8409e6e6249d7124f4ba56fab3c8083a00a06082a8648ce3d030107a144034200045017c87a1c1768264656b3b355434b0def6edb8b9bf166a4762d9930cd730f913fc4e61bcd8901ec27c424114c3e887ed372497f0c2cf85839b8443e76988b34}" |
178 | + # Only Certificate_x509: | ||
179 | + alias: "${LWM2M_KEYSTORE_ALIAS_BS:bootstrap}" | ||
180 | # Use redis for Security and Registration stores | 180 | # Use redis for Security and Registration stores |
181 | redis.enabled: "${LWM2M_REDIS_ENABLED:false}" | 181 | redis.enabled: "${LWM2M_REDIS_ENABLED:false}" |
182 | 182 |