Skip to content
Snippets Groups Projects
Commit c7649861 authored by OZGCloud's avatar OZGCloud
Browse files

OZG-6990 extend grpc util: add more keys and methods

parent 5325fb2d
No related branches found
No related tags found
No related merge requests found
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
### 4.6.0-SNAPSHOT ### 4.6.0-SNAPSHOT
* Update [OZGCloud License Generator](ozgcloud-common-license/readme.md) * Update [OZGCloud License Generator](ozgcloud-common-license/readme.md)
* `GrpcUtil` erweitern: mehr Schlüsseln hinzufügen und Methoden, um diese Schlüssel aus gRPC-Metadaten zu extrahieren.
### 4.5.0 ### 4.5.0
* common-lib erweitern: gRPC Server Downloader für binäre Dateien hinzufügen * common-lib erweitern: gRPC Server Downloader für binäre Dateien hinzufügen
......
...@@ -24,10 +24,10 @@ ...@@ -24,10 +24,10 @@
package de.ozgcloud.common.grpc; package de.ozgcloud.common.grpc;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Stream;
import java.util.stream.StreamSupport; import java.util.stream.StreamSupport;
import io.grpc.Metadata; import io.grpc.Metadata;
...@@ -39,8 +39,11 @@ import lombok.NoArgsConstructor; ...@@ -39,8 +39,11 @@ import lombok.NoArgsConstructor;
public class GrpcUtil { public class GrpcUtil {
public static final Key<byte[]> HEADER_KEY_USER_ID = createKeyOf("USER_ID-bin"); public static final Key<byte[]> HEADER_KEY_USER_ID = createKeyOf("USER_ID-bin");
public static final Key<byte[]> HEADER_KEY_USER_NAME = createKeyOf("USER_NAME-bin");
public static final Key<byte[]> HEADER_KEY_CLIENT_NAME = createKeyOf("CLIENT_NAME-bin"); public static final Key<byte[]> HEADER_KEY_CLIENT_NAME = createKeyOf("CLIENT_NAME-bin");
public static final Key<byte[]> HEADER_KEY_REQUEST_ID = createKeyOf("REQUEST_ID-bin"); public static final Key<byte[]> HEADER_KEY_REQUEST_ID = createKeyOf("REQUEST_ID-bin");
public static final Key<byte[]> HEADER_KEY_ACCESS_LIMITED_ORGAID = createKeyOf("ACCESS_LIMITED_TO_ORGANISATORISCHEEINHEITENID-bin");
public static final Key<byte[]> HEADER_KEY_ACCESS_LIMITED = createKeyOf("ACCESS_LIMITED-bin");
public static Key<String> keyOfString(String key) { public static Key<String> keyOfString(String key) {
return Key.of(key, Metadata.ASCII_STRING_MARSHALLER); return Key.of(key, Metadata.ASCII_STRING_MARSHALLER);
...@@ -50,6 +53,30 @@ public class GrpcUtil { ...@@ -50,6 +53,30 @@ public class GrpcUtil {
return Key.of(key, Metadata.BINARY_BYTE_MARSHALLER); return Key.of(key, Metadata.BINARY_BYTE_MARSHALLER);
} }
public static Optional<String> getRequestId(Metadata headers) {
return getFromHeaders(HEADER_KEY_REQUEST_ID, headers);
}
public static Optional<String> getClientName(Metadata headers) {
return getFromHeaders(HEADER_KEY_CLIENT_NAME, headers);
}
public static Optional<String> getUserId(Metadata headers) {
return getFromHeaders(HEADER_KEY_USER_ID, headers);
}
public static Optional<String> getUserName(Metadata headers) {
return getFromHeaders(HEADER_KEY_USER_NAME, headers);
}
public static List<String> getAccessLimitedOrgaIds(Metadata headers) {
return getList(HEADER_KEY_ACCESS_LIMITED_ORGAID, headers);
}
public static Optional<String> getAccessLimited(Metadata headers) {
return getFromHeaders(HEADER_KEY_ACCESS_LIMITED, headers);
}
public static Optional<String> getFromHeaders(String key, Metadata headers) { public static Optional<String> getFromHeaders(String key, Metadata headers) {
return getFromHeaders(createKeyOf(key), headers); return getFromHeaders(createKeyOf(key), headers);
} }
...@@ -58,14 +85,13 @@ public class GrpcUtil { ...@@ -58,14 +85,13 @@ public class GrpcUtil {
return Optional.ofNullable(headers.get(key)).map(GrpcUtil::byteToString); return Optional.ofNullable(headers.get(key)).map(GrpcUtil::byteToString);
} }
public static Collection<String> getCollection(String key, Metadata headers) { public static List<String> getList(String key, Metadata headers) {
final List<String> result = new ArrayList<>(); return getList(createKeyOf(key), headers);
var valuesOptional = Optional.ofNullable(headers.getAll(createKeyOf(key))); }
valuesOptional.ifPresent(valuesBytes -> result.addAll(StreamSupport.stream(valuesBytes.spliterator(), false)
.map(GrpcUtil::byteToString)
.toList()));
return result; public static List<String> getList(Key<byte[]> key, Metadata headers) {
return Optional.ofNullable(headers.getAll(key)).map(valuesBytes -> StreamSupport.stream(valuesBytes.spliterator(), false))
.orElseGet(Stream::empty).map(GrpcUtil::byteToString).toList();
} }
private static String byteToString(byte[] bytes) { private static String byteToString(byte[] bytes) {
......
...@@ -2,6 +2,7 @@ package de.ozgcloud.common.grpc; ...@@ -2,6 +2,7 @@ package de.ozgcloud.common.grpc;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
import com.thedeanda.lorem.LoremIpsum;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
...@@ -9,14 +10,15 @@ import org.junit.jupiter.api.Test; ...@@ -9,14 +10,15 @@ import org.junit.jupiter.api.Test;
import io.grpc.Metadata; import io.grpc.Metadata;
import java.util.UUID;
class GrpcUtilTest { class GrpcUtilTest {
private static final String KEY_VALUE_BIN = "key_value-bin"; private static final String KEY_VALUE_BIN = "key_value-bin";
private static final String KEY_VALUE_STRING = "key_value"; private static final String KEY_VALUE_STRING = "key_value";
private static final String UNKNOWN_KEY_BIN = "unknown_key-bin"; private static final String UNKNOWN_KEY_BIN = "unknown_key-bin";
@DisplayName("Test Grpc Utility methods") private final Metadata header = new Metadata();
@Nested
class TestGrpcUtils {
@DisplayName("Test creation of MetaData keys") @DisplayName("Test creation of MetaData keys")
@Nested @Nested
...@@ -50,9 +52,7 @@ class GrpcUtilTest { ...@@ -50,9 +52,7 @@ class GrpcUtilTest {
@DisplayName("Test reading values from the grpc header") @DisplayName("Test reading values from the grpc header")
@Nested @Nested
class TestReadingFromHeader { class TestReadingFromHeader {
private static final String TEST_VALUE = "test-value"; private static final String TEST_VALUE = LoremIpsum.getInstance().getWords(1);
private Metadata header = new Metadata();
@BeforeEach @BeforeEach
void initMetadata() { void initMetadata() {
...@@ -77,10 +77,8 @@ class GrpcUtilTest { ...@@ -77,10 +77,8 @@ class GrpcUtilTest {
@DisplayName("Test reading multiple values of a key from the grpc header") @DisplayName("Test reading multiple values of a key from the grpc header")
@Nested @Nested
class TestReadingCollection { class TestReadingCollection {
private static final String TEST_VALUE_1 = "test-value-1"; private static final String TEST_VALUE_1 = LoremIpsum.getInstance().getWords(1);
private static final String TEST_VALUE_2 = "test-value-2"; private static final String TEST_VALUE_2 = LoremIpsum.getInstance().getWords(2);
private Metadata header = new Metadata();
@BeforeEach @BeforeEach
void initMetadata() { void initMetadata() {
...@@ -90,17 +88,106 @@ class GrpcUtilTest { ...@@ -90,17 +88,106 @@ class GrpcUtilTest {
@Test @Test
void shouldReadFromHeader() { void shouldReadFromHeader() {
var values = GrpcUtil.getCollection(KEY_VALUE_BIN, header); var values = GrpcUtil.getList(KEY_VALUE_BIN, header);
assertThat(values).hasSize(2).contains(TEST_VALUE_1, TEST_VALUE_2); assertThat(values).hasSize(2).contains(TEST_VALUE_1, TEST_VALUE_2);
} }
@Test @Test
void shouldGetEmptyCollectionOnUnknownKey() { void shouldGetEmptyCollectionOnUnknownKey() {
var values = GrpcUtil.getCollection(UNKNOWN_KEY_BIN, header); var values = GrpcUtil.getList(UNKNOWN_KEY_BIN, header);
assertThat(values).isEmpty(); assertThat(values).isEmpty();
} }
} }
@Nested
class TestGetRequestId {
private static final String REQUEST_ID = UUID.randomUUID().toString();
@Test
void shouldCallGetFromHeader() {
header.put(GrpcUtil.HEADER_KEY_REQUEST_ID, REQUEST_ID.getBytes());
var result = GrpcUtil.getRequestId(header);
assertThat(result).contains(REQUEST_ID);
}
}
@Nested
class TestGetClientName {
private static final String CLIENT_NAME = LoremIpsum.getInstance().getWords(1);
@Test
void shouldCallGetFromHeader() {
header.put(GrpcUtil.HEADER_KEY_CLIENT_NAME, CLIENT_NAME.getBytes());
var result = GrpcUtil.getClientName(header);
assertThat(result).contains(CLIENT_NAME);
}
}
@Nested
class TestGetUserId {
private static final String USER_ID = LoremIpsum.getInstance().getWords(1);
@Test
void shouldCallGetFromHeader() {
header.put(GrpcUtil.HEADER_KEY_USER_ID, USER_ID.getBytes());
var result = GrpcUtil.getUserId(header);
assertThat(result).contains(USER_ID);
}
}
@Nested
class TestGetUserName {
private static final String USER_NAME = LoremIpsum.getInstance().getWords(1);
@Test
void shouldCallGetFromHeader() {
header.put(GrpcUtil.HEADER_KEY_USER_NAME, USER_NAME.getBytes());
var result = GrpcUtil.getUserName(header);
assertThat(result).contains(USER_NAME);
}
}
@Nested
class TestGetAccessLimitedOrgaId {
private static final String ACCESS_LIMITED_ORGAID = LoremIpsum.getInstance().getWords(1);
@Test
void shouldCallGetFromHeader() {
header.put(GrpcUtil.HEADER_KEY_ACCESS_LIMITED_ORGAID, ACCESS_LIMITED_ORGAID.getBytes());
var result = GrpcUtil.getAccessLimitedOrgaIds(header);
assertThat(result).containsExactly(ACCESS_LIMITED_ORGAID);
}
}
@Nested
class TestGetAccessLimited {
private static final String ACCESS_LIMITED = "access-limited";
@Test
void shouldCallGetFromHeader() {
header.put(GrpcUtil.HEADER_KEY_ACCESS_LIMITED, ACCESS_LIMITED.getBytes());
var result = GrpcUtil.getAccessLimited(header);
assertThat(result).contains(ACCESS_LIMITED);
}
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment