Skip to content

Commit 1eb753e

Browse files
committed
mcp-server: fix "find missing api key"
Signed-off-by: Daniel Garnier-Moiroux <[email protected]>
1 parent 0d7b1bf commit 1eb753e

File tree

2 files changed

+85
-1
lines changed

2 files changed

+85
-1
lines changed

mcp-server-security/src/main/java/org/springaicommunity/mcp/security/server/apikey/memory/InMemoryApiKeyEntityRepository.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ public InMemoryApiKeyEntityRepository(Collection<T> apiKeyEntities) {
4141
@Nullable
4242
@Override
4343
public T findByKeyId(String keyId) {
44-
return apiKeys.get(keyId).copy();
44+
var key = apiKeys.get(keyId);
45+
return key != null ? key.copy() : null;
4546
}
4647

4748
public void addApiKey(T value) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package org.springaicommunity.mcp.security.server.apikey.memory;
2+
3+
import java.util.List;
4+
5+
import org.jspecify.annotations.NonNull;
6+
import org.junit.jupiter.api.Test;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
class InMemoryApiKeyEntityRepositoryTest {
11+
12+
private final ApiKeyEntityImpl apiKeyEntity = ApiKeyEntityImpl.builder()
13+
.id("api01")
14+
.secret("test-secret")
15+
.name("test key")
16+
.build();
17+
18+
private final InMemoryApiKeyEntityRepository<@NonNull ApiKeyEntityImpl> repository = new InMemoryApiKeyEntityRepository<>(
19+
List.of(this.apiKeyEntity));
20+
21+
@Test
22+
void loadsKey() {
23+
var key = this.repository.findByKeyId("api01");
24+
25+
assertThat(key).isNotSameAs(this.apiKeyEntity);
26+
assertThat(key.getId()).isEqualTo(this.apiKeyEntity.getId());
27+
assertThat(key.getSecret()).isEqualTo(this.apiKeyEntity.getSecret());
28+
assertThat(key.getName()).isEqualTo(this.apiKeyEntity.getName());
29+
assertThat(key.getAuthorities()).isEqualTo(this.apiKeyEntity.getAuthorities());
30+
}
31+
32+
@Test
33+
void missingKey() {
34+
var key = this.repository.findByKeyId("does-not-exist");
35+
36+
assertThat(key).isNull();
37+
}
38+
39+
@Test
40+
void containsKey() {
41+
assertThat(this.repository.containsApiKey("api01")).isTrue();
42+
assertThat(this.repository.containsApiKey("does-not-exist")).isFalse();
43+
}
44+
45+
@Test
46+
void addApiKey() {
47+
var addedKey = ApiKeyEntityImpl.builder().id("api02").secret("custom-secret").name("added key").build();
48+
49+
this.repository.addApiKey(addedKey);
50+
var key = this.repository.findByKeyId("api02");
51+
52+
assertThat(key).isNotSameAs(addedKey);
53+
assertThat(key.getId()).isEqualTo(addedKey.getId());
54+
assertThat(key.getSecret()).isEqualTo(addedKey.getSecret());
55+
assertThat(key.getName()).isEqualTo(addedKey.getName());
56+
assertThat(key.getAuthorities()).isEqualTo(addedKey.getAuthorities());
57+
}
58+
59+
@Test
60+
void addApiKeyOverrides() {
61+
var addedKey = ApiKeyEntityImpl.builder().id("api02").secret("custom-secret").name("added key").build();
62+
var addedKeyOverride = ApiKeyEntityImpl.builder().id("api02").secret("custom-secret").name("added key").build();
63+
64+
this.repository.addApiKey(addedKey);
65+
this.repository.addApiKey(addedKeyOverride);
66+
var key = this.repository.findByKeyId("api02");
67+
68+
assertThat(key).isNotSameAs(addedKeyOverride);
69+
assertThat(key.getId()).isEqualTo(addedKeyOverride.getId());
70+
assertThat(key.getSecret()).isEqualTo(addedKeyOverride.getSecret());
71+
assertThat(key.getName()).isEqualTo(addedKeyOverride.getName());
72+
assertThat(key.getAuthorities()).isEqualTo(addedKeyOverride.getAuthorities());
73+
}
74+
75+
@Test
76+
void removeApiKey() {
77+
this.repository.removeApiKey("api01");
78+
this.repository.removeApiKey("does-not-exist");
79+
80+
assertThat(this.repository.containsApiKey("api01")).isFalse();
81+
}
82+
83+
}

0 commit comments

Comments
 (0)