aboutsummaryrefslogtreecommitdiff
path: root/tests/ci/ci-load.test
blob: c4a4c6226882d087a70e5ad26634b0decf3e7617 (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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# file      : tests/ci/ci-load.test
# copyright : Copyright (c) 2014-2018 Code Synthesis Ltd
# license   : MIT; see accompanying LICENSE file

.include data.test

: args
{
  : none
  :
  $* 2>>~%EOE% != 0
  %\[.+\] \[brep:error\] \[ref \] \[brep-ci-load\]: usage: .+brep-ci-load \[--result-url <url>\] <loader-path> \[<loader-options>\] <dir>%
  EOE

  : no-dir
  :
  $* brep-load 2>>~%EOE% != 0
  %\[.+\] \[brep:error\] \[ref brep-load\] \[brep-ci-load\]: usage: .+brep-ci-load \[--result-url <url>\] <loader-path> \[<loader-options>\] <dir>%
  EOE

  : dir-not-exist
  :
  $* brep-load $~/dir 2>>~%EOE% != 0
    %\[.+\] \[brep:error\] \[ref dir\] \[brep-ci-load\]: '.+dir' does not exist or is not a directory%
    EOE
}

: success
:
{
  : simulate
  :
  {
    $clone_root_data;

    echo 'simulate: success' >+$data_dir/request.manifest;

    $* ./brep-load $data_dir >>"EOO";
      : 1
      status: 200
      message: CI request is queued
      reference: $request_id
      EOO

    test -d $data_dir != 0
  }

  : for-real
  :
  {
    # Create the loader script that validates the arguments passed and the
    # files produced by the handler.
    #
    loader=$~/brep-load

    cat <<"EOI" >=$loader;
      #!/usr/bin/env bash
      if [ "\$#" != 5 -o \
           "\$1" != "--db-host=localhost" -o \
           "\$2" != "--db-port=8432" -o \
           "\$3" != "--force" -o \
           "\$4" != "--shallow" -o \
           "\$5" != "$data_dir/loadtab" -o \
           ! -f "$data_dir/cache/repositories.manifest" -o \
           ! -f "$data_dir/cache/packages.manifest" ]; then
        exit 1
      fi
      if ! diff "$data_dir/loadtab" - <<<"https://git.build2.org/hello/hello.git#master hello cache:cache"; then
        exit 1
      fi
      EOI

    chmod 755 $loader;

    $clone_root_data;

    $* $loader --db-host=localhost --db-port=8432 $data_dir >>"EOO"
      : 1
      status: 200
      message: CI request is queued
      reference: $request_id
      EOO

    $clone_root_data;

    $* --result-url "http://example.com/" \
       $loader --db-host=localhost --db-port=8432 \
       $data_dir >>"EOO"
      : 1
      status: 200
      message: CI request is queued: http://example.com
      reference: $request_id
      EOO
  }
}

: failure
:
{
  test.arguments += ./brep-load $data_dir

  : bad-simulate
  :
  {
    $clone_root_data_clean;

    echo 'simulate: fly' >+$data_dir/request.manifest;

    $* >>"EOO"
      : 1
      status: 400
      message: unrecognized simulation outcome 'fly'
      reference: $request_id
      EOO
  }

  : unable-fetch-repo
  :
  {
    $clone_root_data_clean;

    sed -i -e "s%^\(repository:\) .+\$%\\1 http://example.com/repo.git%" \
	$data_dir/request.manifest;

    $* >>~"%EOO%"
      : 1
      status: 422
      %message: unable to fetch repository information .+%
      %.*
      reference: $request_id
      EOO
  }

  : loader-not-exist
  :
  {
    $clone_root_data_clean;

    $* 2>~'%.*brep-load.*%' != 0
  }
}