@@ -59,33 +59,89 @@ var _ = Describe("Build", func() {
59
59
}
60
60
61
61
var checkConfigureCmd = func (cmd exec.Cmd ) {
62
- Expect (cmd .String ()).To (ContainSubstring ("docker run" ))
63
- Expect (cmd .String ()).To (ContainSubstring ("--env DISCOURSE_DEVELOPER_EMAILS" ))
64
- Expect (cmd .String ()).To (ContainSubstring ("--env SKIP_EMBER_CLI_COMPILE=1" ))
65
- // we commit, we need the container to stick around after it is stopped.
66
- Expect (cmd .String ()).ToNot (ContainSubstring ("--rm" ))
67
-
68
- // we don't expose ports on configure command
69
- Expect (cmd .String ()).ToNot (ContainSubstring ("-p 80" ))
70
- Expect (cmd .Env ).To (ContainElement ("DISCOURSE_DB_PASSWORD=SOME_SECRET" ))
62
+ Expect (cmd .String ()).To (Equal (
63
+ "/usr/local/bin/docker run " +
64
+ "--env DISCOURSE_DB_HOST " +
65
+ "--env DISCOURSE_DB_PASSWORD " +
66
+ "--env DISCOURSE_DB_PORT " +
67
+ "--env DISCOURSE_DB_SOCKET " +
68
+ "--env DISCOURSE_DEVELOPER_EMAILS " +
69
+ "--env DISCOURSE_HOSTNAME " +
70
+ "--env DISCOURSE_REDIS_HOST " +
71
+ "--env DISCOURSE_SMTP_ADDRESS " +
72
+ "--env DISCOURSE_SMTP_PASSWORD " +
73
+ "--env DISCOURSE_SMTP_USER_NAME " +
74
+ "--env LANG " +
75
+ "--env LANGUAGE " +
76
+ "--env LC_ALL " +
77
+ "--env MULTI " +
78
+ "--env RAILS_ENV " +
79
+ "--env REPLACED " +
80
+ "--env RUBY_GC_HEAP_GROWTH_MAX_SLOTS " +
81
+ "--env RUBY_GC_HEAP_INIT_SLOTS " +
82
+ "--env RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR " +
83
+ "--env UNICORN_SIDEKIQS " +
84
+ "--env UNICORN_WORKERS " +
85
+ "--env SKIP_EMBER_CLI_COMPILE=1 " +
86
+ "--volume /var/discourse/shared/web-only:/shared " +
87
+ "--volume /var/discourse/shared/web-only/log/var-log:/var/log " +
88
+ "--link data:data " +
89
+ "--shm-size=512m " +
90
+ "--restart=no " +
91
+ "--interactive " +
92
+ "--expose 100 " +
93
+ "--name discourse-build-test " +
94
+ "local_discourse/test /bin/bash -c /usr/local/bin/pups --stdin --tags=db,precompile" ,
95
+ ))
96
+
97
+ Expect (cmd .Env ).To (Equal ([]string {
98
+ "DISCOURSE_DB_HOST=data" ,
99
+ "DISCOURSE_DB_PASSWORD=SOME_SECRET" ,
100
+ "DISCOURSE_DB_PORT=" ,
101
+ "DISCOURSE_DB_SOCKET=" ,
102
+
103
+ "DISCOURSE_HOSTNAME=discourse.example.com" ,
104
+ "DISCOURSE_REDIS_HOST=data" ,
105
+ "DISCOURSE_SMTP_ADDRESS=smtp.example.com" ,
106
+ "DISCOURSE_SMTP_PASSWORD=pa$$word" ,
107
+
108
+ "LANG=en_US.UTF-8" ,
109
+ "LANGUAGE=en_US.UTF-8" ,
110
+ "LC_ALL=en_US.UTF-8" ,
111
+ "MULTI=test\n multiline with some spaces\n var\n " ,
112
+ "RAILS_ENV=production" ,
113
+ "REPLACED=test/test/test" ,
114
+ "RUBY_GC_HEAP_GROWTH_MAX_SLOTS=40000" ,
115
+ "RUBY_GC_HEAP_INIT_SLOTS=400000" ,
116
+ "RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR=1.5" ,
117
+ "UNICORN_SIDEKIQS=1" ,
118
+ "UNICORN_WORKERS=3" ,
119
+ }))
120
+
71
121
buf := new (strings.Builder )
72
122
io .Copy (buf , cmd .Stdin )
73
123
// docker run's stdin is a pups config
124
+
125
+ // web.template.yml is merged with the test config
74
126
Expect (buf .String ()).To (ContainSubstring ("path: /etc/service/nginx/run" ))
127
+ Expect (buf .String ()).To (ContainSubstring (`exec: echo "custom test command"` ))
75
128
}
76
129
77
130
// commit on configure
78
131
var checkConfigureCommit = func (cmd exec.Cmd ) {
79
- Expect (cmd .String ()).To (ContainSubstring ("docker commit" ))
80
- Expect (cmd .String ()).To (ContainSubstring ("--change CMD [\" /sbin/boot\" ]" ))
81
- Expect (cmd .String ()).To (ContainSubstring ("discourse-build" ))
82
- Expect (cmd .String ()).To (ContainSubstring ("local_discourse/test" ))
83
- Expect (cmd .Env ).ToNot (ContainElement ("DISCOURSE_DB_PASSWORD=SOME_SECRET" ))
132
+ Expect (cmd .String ()).To (MatchRegexp (
133
+ "/usr/local/bin/docker commit " +
134
+ `--change LABEL org\.opencontainers\.image\.created="[\d\-T:+]+" ` +
135
+ `--change CMD \["/sbin/boot"\] ` +
136
+ "discourse-build-test local_discourse/test" ,
137
+ ))
138
+
139
+ Expect (cmd .Env ).To (BeNil ())
84
140
}
85
141
86
142
// configure also cleans up
87
143
var checkConfigureClean = func (cmd exec.Cmd ) {
88
- Expect (cmd .String ()).To (ContainSubstring ( " docker rm -f discourse-build-" ))
144
+ Expect (cmd .String ()).To (Equal ( "/usr/local/bin/ docker rm --force discourse-build-test " ))
89
145
}
90
146
91
147
It ("Should run docker build with correct arguments" , func () {
@@ -99,6 +155,7 @@ var _ = Describe("Build", func() {
99
155
runner := ddocker.DockerConfigureCmd {Config : "test" }
100
156
runner .Run (cli , & ctx )
101
157
Expect (len (RanCmds )).To (Equal (3 ))
158
+
102
159
checkConfigureCmd (RanCmds [0 ])
103
160
checkConfigureCommit (RanCmds [1 ])
104
161
checkConfigureClean (RanCmds [2 ])
0 commit comments