summaryrefslogtreecommitdiff
path: root/test/unit/quick_start_test.rb
blob: d26f9c85c1f687cfab51d9747876862c46555521 (plain)
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
require_relative 'test_helper'

#
# Runs all the commands in https://leap.se/quick-start
#

Minitest.after_run {
  FileUtils.rm_r(QuickStartTest::TMP_PROVIDER)
}

class QuickStartTest < Minitest::Test

  # very reasonable to have ordered tests in this case, actually
  i_suck_and_my_tests_are_order_dependent!

  TMP_PROVIDER = Dir.mktmpdir("test_leap_provider_")

  #
  # use minimal bit sizes for our test.
  #
  PROVIDER_JSON = <<HERE
{
  "domain": "example.org",
  "name": {
    "en": "Example"
  },
  "description": {
    "en": "Example"
  },
  "languages": ["en"],
  "default_language": "en",
  "enrollment_policy": "open",
  "contacts": {
    "default": "root@localhost"
  },
  "ca": {
    "bit_size": 1024,
    "client_certificates": {
      "bit_size": 1024,
      "digest": "SHA1",
      "life_span": "100 years"
    },
    "life_span": "100 years",
    "server_certificates": {
      "bit_size": 1024,
      "digest": "SHA1",
      "life_span": "100 years"
    }
  }
}
HERE

  def provider_path
    TMP_PROVIDER
  end

  def test_01_new
    output = leap_bin! "new --contacts me@example.org --domain example.org --name Example --platform='#{platform_path}' ."
    assert_file "Leapfile"
    assert_file "provider.json"
    assert_dir "nodes"
    File.write(File.join(provider_path, 'provider.json'), PROVIDER_JSON)
  end

  def test_02_ca
    leap_bin! "cert ca"
    assert_dir "files/ca"
    assert_file "files/ca/ca.crt"
    assert_file "files/ca/ca.key"
  end

  def test_03_csr
    leap_bin! "cert csr"
    assert_file "files/cert/example.org.csr"
    assert_file "files/cert/example.org.crt"
    assert_file "files/cert/example.org.key"
  end

  def test_04_nodes
    leap_bin! "node add wildebeest ip_address:1.1.1.2 services:webapp,couchdb"
    leap_bin! "node add hippo ip_address:1.1.1.3 services:static"
    assert_file "nodes/wildebeest.json"
    assert_dir "files/nodes/wildebeest"
    assert_file "files/nodes/wildebeest/wildebeest.crt"
    assert_file "files/nodes/wildebeest/wildebeest.key"
  end

  def test_05_compile
    user_dir = File.join(provider_path, 'users', 'dummy')
    user_key = File.join(user_dir, 'dummy_ssh.pub')
    FileUtils.mkdir_p(user_dir)
    File.write(user_key, 'ssh-rsa dummydummydummy')

    leap_bin! "compile"
    assert_file "hiera/wildebeest.yaml"
    assert_file "hiera/hippo.yaml"
  end

  def test_06_rename
    leap_bin! "node mv hippo hippopotamus"
    assert_file "nodes/hippopotamus.json"
    assert_dir "files/nodes/hippopotamus"
    assert_file "files/nodes/hippopotamus/hippopotamus.key"
  end

  def test_07_rm
    leap_bin! "node rm hippopotamus"
    assert_file_missing "nodes/hippopotamus.json"
    assert_file_missing "files/nodes/hippopotamus/hippopotamus.key"
  end

  def assert_file(path)
    assert File.exist?(File.join(provider_path, path)), "The file `#{path}` should exist in #{provider_path}. Actual: \n#{provider_files}"
  end

  def assert_file_missing(path)
    assert !File.exist?(File.join(provider_path, path)), "The file `#{path}` should NOT exist in #{provider_path}."
  end

  def assert_dir(path)
    assert Dir.exist?(File.join(provider_path, path)), "The directory `#{path}` should exist in #{provider_path}. Actual: \n#{provider_files}"
  end

  def provider_files
    `cd #{provider_path} && find .`
  end
end