aboutsummaryrefslogtreecommitdiffstats
path: root/container-di/src/test/scala/com/yahoo/container/di/ConfigRetrieverTest.scala
blob: 93618f90e926f38734e49de6ec0afb1c032e1eb5 (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
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]
}