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
82
83
84
85
86
87
88
89
|
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.container.di
import com.yahoo.config.test.{Bootstrap1Config, Bootstrap2Config, TestConfig}
import com.yahoo.container.di.ConfigRetriever.{BootstrapConfigs, ComponentsConfigs}
import com.yahoo.vespa.config.ConfigKey
import org.hamcrest.CoreMatchers.{is, instanceOf => hamcrestInstanceOf}
import org.hamcrest.Matcher
import org.junit.Assert._
import org.junit.{After, Before, Ignore, Test}
import scala.reflect.ClassTag
import scala.collection.JavaConverters._
/**
*
* @author gjoranv
* @author tonytv
*/
class ConfigRetrieverTest {
var dirConfigSource: DirConfigSource = null
@Before def setup() {
dirConfigSource = new DirConfigSource("ConfigRetrieverTest-")
}
@After def cleanup() { dirConfigSource.cleanup() }
@Test
def require_that_bootstrap_configs_come_first() {
writeConfigs()
val retriever = createConfigRetriever()
val bootstrapConfigs = retriever.getConfigs(Set(), 0)
assertThat(bootstrapConfigs, instanceOf[BootstrapConfigs])
}
@Test
def require_that_components_comes_after_bootstrap() {
writeConfigs()
val retriever = createConfigRetriever()
val bootstrapConfigs = retriever.getConfigs(Set(), 0)
val testConfigKey = new ConfigKey(classOf[TestConfig], dirConfigSource.configId)
val componentsConfigs = retriever.getConfigs(Set(testConfigKey), 0)
componentsConfigs match {
case ComponentsConfigs(configs) => assertThat(configs.size, is(3))
case _ => fail("ComponentsConfigs has unexpected type: " + componentsConfigs)
}
}
@Test(expected = classOf[IllegalArgumentException])
@Ignore
def require_exception_upon_modified_components_keys_without_bootstrap() {
writeConfigs()
val retriever = createConfigRetriever()
val testConfigKey = new ConfigKey(classOf[TestConfig], dirConfigSource.configId)
val bootstrapConfigs = retriever.getConfigs(Set(), 0)
val componentsConfigs = retriever.getConfigs(Set(testConfigKey), 0)
retriever.getConfigs(Set(testConfigKey, new ConfigKey(classOf[TestConfig],"")), 0)
}
@Test
def require_that_empty_components_keys_after_bootstrap_returns_components_configs() {
writeConfigs()
val retriever = createConfigRetriever()
assertThat(retriever.getConfigs(Set(), 0), instanceOf[BootstrapConfigs])
assertThat(retriever.getConfigs(Set(), 0), instanceOf[ComponentsConfigs])
}
def writeConfigs() {
writeConfig("bootstrap1", """dummy "ignored" """")
writeConfig("bootstrap2", """dummy "ignored" """")
writeConfig("test", """stringVal "ignored" """")
}
def createConfigRetriever() = {
val configId = dirConfigSource.configId
val subscriber = new CloudSubscriberFactory(dirConfigSource.configSource)
new ConfigRetriever(
Set(new ConfigKey(classOf[Bootstrap1Config], configId),
new ConfigKey(classOf[Bootstrap2Config], configId)),
(keys) => subscriber.getSubscriber(keys.asJava))
}
def writeConfig = dirConfigSource.writeConfig _
def instanceOf[T: ClassTag] = hamcrestInstanceOf(implicitly[ClassTag[T]].runtimeClass): Matcher[AnyRef]
}
|