blob: cb9bcea7da3c70409cbc91185e2c2f0449744fed (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.node.admin.integration;
import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.Acl;
import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.AddNode;
import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NoSuchNodeException;
import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeAttributes;
import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeRepository;
import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec;
import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeState;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* Mock with some simple logic
*
* @author dybis
*/
public class NodeRepoMock implements NodeRepository {
private final Map<String, NodeSpec> nodeSpecByHostname = new ConcurrentHashMap<>();
private volatile Map<String, Acl> aclByHostname = Map.of();
@Override
public void addNodes(List<AddNode> nodes) { }
@Override
public List<NodeSpec> getNodes(String baseHostName) {
return nodeSpecByHostname.values().stream()
.filter(node -> baseHostName.equals(node.parentHostname().orElse(null)))
.collect(Collectors.toList());
}
@Override
public Optional<NodeSpec> getOptionalNode(String hostName) {
return Optional.ofNullable(nodeSpecByHostname.get(hostName));
}
@Override
public Map<String, Acl> getAcls(String hostname) {
return aclByHostname;
}
@Override
public void updateNodeAttributes(String hostName, NodeAttributes nodeAttributes) {
updateNodeSpec(new NodeSpec.Builder(getNode(hostName))
.updateFromNodeAttributes(nodeAttributes)
.build());
}
@Override
public void setNodeState(String hostName, NodeState nodeState) {
updateNodeSpec(new NodeSpec.Builder(getNode(hostName))
.state(nodeState)
.build());
}
public void updateNodeSpec(NodeSpec nodeSpec) {
nodeSpecByHostname.put(nodeSpec.hostname(), nodeSpec);
}
public void updateNodeSpec(String hostname, Function<NodeSpec.Builder, NodeSpec.Builder> mapper) {
nodeSpecByHostname.compute(hostname, (__, nodeSpec) -> {
if (nodeSpec == null) throw new NoSuchNodeException(hostname);
return mapper.apply(new NodeSpec.Builder(nodeSpec)).build();
});
}
public void resetNodeSpecs() {
nodeSpecByHostname.clear();
}
public void setAcl(Map<String, Acl> aclByHostname) {
this.aclByHostname = Map.copyOf(aclByHostname);
}
}
|