BigW Consortium Gitlab
Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gitlab-ce
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Forest Godfrey
gitlab-ce
Commits
4c53cc0e
Commit
4c53cc0e
authored
Sep 14, 2015
by
Valery Sizov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
rubocop satisfy
parent
95037c9c
Hide whitespace changes
Inline
Side-by-side
Showing
28 changed files
with
190 additions
and
190 deletions
+190
-190
runners_controller.rb
app/controllers/ci/admin/runners_controller.rb
+1
-1
builds_controller.rb
app/controllers/ci/builds_controller.rb
+7
-7
charts_controller.rb
app/controllers/ci/charts_controller.rb
+4
-4
commits_controller.rb
app/controllers/ci/commits_controller.rb
+6
-6
events_controller.rb
app/controllers/ci/events_controller.rb
+3
-3
lints_controller.rb
app/controllers/ci/lints_controller.rb
+1
-1
projects_controller.rb
app/controllers/ci/projects_controller.rb
+7
-7
runner_projects_controller.rb
app/controllers/ci/runner_projects_controller.rb
+3
-3
runners_controller.rb
app/controllers/ci/runners_controller.rb
+5
-5
services_controller.rb
app/controllers/ci/services_controller.rb
+5
-5
triggers_controller.rb
app/controllers/ci/triggers_controller.rb
+4
-4
variables_controller.rb
app/controllers/ci/variables_controller.rb
+4
-4
web_hooks_controller.rb
app/controllers/ci/web_hooks_controller.rb
+4
-4
database.rb
lib/ci/backup/database.rb
+18
-18
projects_controller_spec.rb
spec/controllers/ci/projects_controller_spec.rb
+9
-9
commits.rb
spec/factories/ci/commits.rb
+2
-2
gitlab_ci_yaml_processor_spec.rb
spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
+20
-20
build_spec.rb
spec/models/ci/build_spec.rb
+13
-13
mail_service_spec.rb
spec/models/ci/mail_service_spec.rb
+8
-8
project_spec.rb
spec/models/ci/project_spec.rb
+8
-8
builds_spec.rb
spec/requests/ci/api/builds_spec.rb
+10
-10
commits_spec.rb
spec/requests/ci/api/commits_spec.rb
+4
-4
forks_spec.rb
spec/requests/ci/api/forks_spec.rb
+6
-6
projects_spec.rb
spec/requests/ci/api/projects_spec.rb
+8
-8
runners_spec.rb
spec/requests/ci/api/runners_spec.rb
+6
-6
triggers_spec.rb
spec/requests/ci/api/triggers_spec.rb
+4
-4
create_commit_service_spec.rb
spec/services/ci/create_commit_service_spec.rb
+6
-6
stub_gitlab_calls.rb
spec/support/stub_gitlab_calls.rb
+14
-14
No files found.
app/controllers/ci/admin/runners_controller.rb
View file @
4c53cc0e
module
Ci
class
Admin
::
RunnersController
<
Ci
::
Admin
::
ApplicationController
before_
filter
:runner
,
except: :index
before_
action
:runner
,
except: :index
def
index
@runners
=
Ci
::
Runner
.
order
(
'id DESC'
)
...
...
app/controllers/ci/builds_controller.rb
View file @
4c53cc0e
module
Ci
class
BuildsController
<
Ci
::
ApplicationController
before_
filter
:authenticate_user!
,
except:
[
:status
,
:show
]
before_
filter
:authenticate_public_page!
,
only: :show
before_
filter
:project
before_
filter
:authorize_access_project!
,
except:
[
:status
,
:show
]
before_
filter
:authorize_manage_project!
,
except:
[
:status
,
:show
,
:retry
,
:cancel
]
before_
filter
:authorize_manage_builds!
,
only:
[
:retry
,
:cancel
]
before_
filter
:build
,
except:
[
:show
]
before_
action
:authenticate_user!
,
except:
[
:status
,
:show
]
before_
action
:authenticate_public_page!
,
only: :show
before_
action
:project
before_
action
:authorize_access_project!
,
except:
[
:status
,
:show
]
before_
action
:authorize_manage_project!
,
except:
[
:status
,
:show
,
:retry
,
:cancel
]
before_
action
:authorize_manage_builds!
,
only:
[
:retry
,
:cancel
]
before_
action
:build
,
except:
[
:show
]
layout
'ci/project'
def
show
...
...
app/controllers/ci/charts_controller.rb
View file @
4c53cc0e
module
Ci
class
ChartsController
<
Ci
::
ApplicationController
before_
filter
:authenticate_user!
before_
filter
:project
before_
filter
:authorize_access_project!
before_
filter
:authorize_manage_project!
before_
action
:authenticate_user!
before_
action
:project
before_
action
:authorize_access_project!
before_
action
:authorize_manage_project!
layout
'ci/project'
...
...
app/controllers/ci/commits_controller.rb
View file @
4c53cc0e
module
Ci
class
CommitsController
<
Ci
::
ApplicationController
before_
filter
:authenticate_user!
,
except:
[
:status
,
:show
]
before_
filter
:authenticate_public_page!
,
only: :show
before_
filter
:project
before_
filter
:authorize_access_project!
,
except:
[
:status
,
:show
,
:cancel
]
before_
filter
:authorize_manage_builds!
,
only:
[
:cancel
]
before_
filter
:commit
,
only: :show
before_
action
:authenticate_user!
,
except:
[
:status
,
:show
]
before_
action
:authenticate_public_page!
,
only: :show
before_
action
:project
before_
action
:authorize_access_project!
,
except:
[
:status
,
:show
,
:cancel
]
before_
action
:authorize_manage_builds!
,
only:
[
:cancel
]
before_
action
:commit
,
only: :show
layout
'ci/project'
def
show
...
...
app/controllers/ci/events_controller.rb
View file @
4c53cc0e
...
...
@@ -2,9 +2,9 @@ module Ci
class
EventsController
<
Ci
::
ApplicationController
EVENTS_PER_PAGE
=
50
before_
filter
:authenticate_user!
before_
filter
:project
before_
filter
:authorize_manage_project!
before_
action
:authenticate_user!
before_
action
:project
before_
action
:authorize_manage_project!
layout
'ci/project'
...
...
app/controllers/ci/lints_controller.rb
View file @
4c53cc0e
module
Ci
class
LintsController
<
Ci
::
ApplicationController
before_
filter
:authenticate_user!
before_
action
:authenticate_user!
def
show
end
...
...
app/controllers/ci/projects_controller.rb
View file @
4c53cc0e
...
...
@@ -2,13 +2,13 @@ module Ci
class
ProjectsController
<
Ci
::
ApplicationController
PROJECTS_BATCH
=
100
before_
filter
:authenticate_user!
,
except:
[
:build
,
:badge
,
:index
,
:show
]
before_
filter
:authenticate_public_page!
,
only: :show
before_
filter
:project
,
only:
[
:build
,
:integration
,
:show
,
:badge
,
:edit
,
:update
,
:destroy
,
:toggle_shared_runners
,
:dumped_yaml
]
before_
filter
:authorize_access_project!
,
except:
[
:build
,
:gitlab
,
:badge
,
:index
,
:show
,
:new
,
:create
]
before_
filter
:authorize_manage_project!
,
only:
[
:edit
,
:integration
,
:update
,
:destroy
,
:toggle_shared_runners
,
:dumped_yaml
]
before_
filter
:authenticate_token!
,
only:
[
:build
]
before_
filter
:no_cache
,
only:
[
:badge
]
before_
action
:authenticate_user!
,
except:
[
:build
,
:badge
,
:index
,
:show
]
before_
action
:authenticate_public_page!
,
only: :show
before_
action
:project
,
only:
[
:build
,
:integration
,
:show
,
:badge
,
:edit
,
:update
,
:destroy
,
:toggle_shared_runners
,
:dumped_yaml
]
before_
action
:authorize_access_project!
,
except:
[
:build
,
:gitlab
,
:badge
,
:index
,
:show
,
:new
,
:create
]
before_
action
:authorize_manage_project!
,
only:
[
:edit
,
:integration
,
:update
,
:destroy
,
:toggle_shared_runners
,
:dumped_yaml
]
before_
action
:authenticate_token!
,
only:
[
:build
]
before_
action
:no_cache
,
only:
[
:badge
]
protect_from_forgery
except: :build
layout
'ci/project'
,
except:
[
:index
,
:gitlab
]
...
...
app/controllers/ci/runner_projects_controller.rb
View file @
4c53cc0e
module
Ci
class
RunnerProjectsController
<
Ci
::
ApplicationController
before_
filter
:authenticate_user!
before_
filter
:project
before_
filter
:authorize_manage_project!
before_
action
:authenticate_user!
before_
action
:project
before_
action
:authorize_manage_project!
layout
'ci/project'
...
...
app/controllers/ci/runners_controller.rb
View file @
4c53cc0e
module
Ci
class
RunnersController
<
Ci
::
ApplicationController
before_
filter
:authenticate_user!
before_
filter
:project
before_
filter
:set_runner
,
only:
[
:edit
,
:update
,
:destroy
,
:pause
,
:resume
,
:show
]
before_
filter
:authorize_access_project!
before_
filter
:authorize_manage_project!
before_
action
:authenticate_user!
before_
action
:project
before_
action
:set_runner
,
only:
[
:edit
,
:update
,
:destroy
,
:pause
,
:resume
,
:show
]
before_
action
:authorize_access_project!
before_
action
:authorize_manage_project!
layout
'ci/project'
...
...
app/controllers/ci/services_controller.rb
View file @
4c53cc0e
module
Ci
class
ServicesController
<
Ci
::
ApplicationController
before_
filter
:authenticate_user!
before_
filter
:project
before_
filter
:authorize_access_project!
before_
filter
:authorize_manage_project!
before_
filter
:service
,
only:
[
:edit
,
:update
,
:test
]
before_
action
:authenticate_user!
before_
action
:project
before_
action
:authorize_access_project!
before_
action
:authorize_manage_project!
before_
action
:service
,
only:
[
:edit
,
:update
,
:test
]
respond_to
:html
...
...
app/controllers/ci/triggers_controller.rb
View file @
4c53cc0e
module
Ci
class
TriggersController
<
Ci
::
ApplicationController
before_
filter
:authenticate_user!
before_
filter
:project
before_
filter
:authorize_access_project!
before_
filter
:authorize_manage_project!
before_
action
:authenticate_user!
before_
action
:project
before_
action
:authorize_access_project!
before_
action
:authorize_manage_project!
layout
'ci/project'
...
...
app/controllers/ci/variables_controller.rb
View file @
4c53cc0e
module
Ci
class
VariablesController
<
Ci
::
ApplicationController
before_
filter
:authenticate_user!
before_
filter
:project
before_
filter
:authorize_access_project!
before_
filter
:authorize_manage_project!
before_
action
:authenticate_user!
before_
action
:project
before_
action
:authorize_access_project!
before_
action
:authorize_manage_project!
layout
'ci/project'
...
...
app/controllers/ci/web_hooks_controller.rb
View file @
4c53cc0e
module
Ci
class
WebHooksController
<
Ci
::
ApplicationController
before_
filter
:authenticate_user!
before_
filter
:project
before_
filter
:authorize_access_project!
before_
filter
:authorize_manage_project!
before_
action
:authenticate_user!
before_
action
:project
before_
action
:authorize_access_project!
before_
action
:authorize_manage_project!
layout
'ci/project'
...
...
lib/ci/backup/database.rb
View file @
4c53cc0e
...
...
@@ -13,13 +13,13 @@ module Ci
def
dump
success
=
case
config
[
"adapter"
]
when
/^mysql/
then
$progress
.
print
"Dumping MySQL database
#{
config
[
'database'
]
}
... "
system
(
'mysqldump'
,
*
mysql_args
,
config
[
'database'
],
out:
db_file_name
)
when
"postgresql"
then
$progress
.
print
"Dumping PostgreSQL database
#{
config
[
'database'
]
}
... "
pg_env
system
(
'pg_dump'
,
config
[
'database'
],
out:
db_file_name
)
when
/^mysql/
then
$progress
.
print
"Dumping MySQL database
#{
config
[
'database'
]
}
... "
system
(
'mysqldump'
,
*
mysql_args
,
config
[
'database'
],
out:
db_file_name
)
when
"postgresql"
then
$progress
.
print
"Dumping PostgreSQL database
#{
config
[
'database'
]
}
... "
pg_env
system
(
'pg_dump'
,
config
[
'database'
],
out:
db_file_name
)
end
report_success
(
success
)
abort
'Backup failed'
unless
success
...
...
@@ -27,17 +27,17 @@ module Ci
def
restore
success
=
case
config
[
"adapter"
]
when
/^mysql/
then
$progress
.
print
"Restoring MySQL database
#{
config
[
'database'
]
}
... "
system
(
'mysql'
,
*
mysql_args
,
config
[
'database'
],
in:
db_file_name
)
when
"postgresql"
then
$progress
.
print
"Restoring PostgreSQL database
#{
config
[
'database'
]
}
... "
# Drop all tables because PostgreSQL DB dumps do not contain DROP TABLE
# statements like MySQL.
drop_all_tables
drop_all_postgres_sequences
pg_env
system
(
'psql'
,
config
[
'database'
],
'-f'
,
db_file_name
)
when
/^mysql/
then
$progress
.
print
"Restoring MySQL database
#{
config
[
'database'
]
}
... "
system
(
'mysql'
,
*
mysql_args
,
config
[
'database'
],
in:
db_file_name
)
when
"postgresql"
then
$progress
.
print
"Restoring PostgreSQL database
#{
config
[
'database'
]
}
... "
# Drop all tables because PostgreSQL DB dumps do not contain DROP TABLE
# statements like MySQL.
drop_all_tables
drop_all_postgres_sequences
pg_env
system
(
'psql'
,
config
[
'database'
],
'-f'
,
db_file_name
)
end
report_success
(
success
)
abort
'Restore failed'
unless
success
...
...
spec/controllers/ci/projects_controller_spec.rb
View file @
4c53cc0e
...
...
@@ -8,12 +8,12 @@ describe Ci::ProjectsController do
describe
"POST #build"
do
it
'should respond 200 if params is ok'
do
post
:build
,
id:
@project
.
id
,
ref:
'master'
,
before:
'2aa371379db71ac89ae20843fcff3b3477cf1a1d'
,
after:
'1c8a9df454ef68c22c2a33cca8232bb50849e5c5'
,
token:
@project
.
token
,
ref:
'master'
,
before:
'2aa371379db71ac89ae20843fcff3b3477cf1a1d'
,
after:
'1c8a9df454ef68c22c2a33cca8232bb50849e5c5'
,
token:
@project
.
token
,
ci_yaml_file:
gitlab_ci_yaml
,
commits:
[
{
message:
"Message"
}
]
commits:
[
{
message:
"Message"
}
]
expect
(
response
).
to
be_success
...
...
@@ -22,10 +22,10 @@ describe Ci::ProjectsController do
it
'should respond 400 if push about removed branch'
do
post
:build
,
id:
@project
.
id
,
ref:
'master'
,
before:
'2aa371379db71ac89ae20843fcff3b3477cf1a1d'
,
after:
'0000000000000000000000000000000000000000'
,
token:
@project
.
token
,
ref:
'master'
,
before:
'2aa371379db71ac89ae20843fcff3b3477cf1a1d'
,
after:
'0000000000000000000000000000000000000000'
,
token:
@project
.
token
,
ci_yaml_file:
gitlab_ci_yaml
expect
(
response
).
not_to
be_success
...
...
spec/factories/ci/commits.rb
View file @
4c53cc0e
...
...
@@ -60,14 +60,14 @@ FactoryGirl.define do
factory
:ci_commit_with_one_job
do
after
(
:create
)
do
|
commit
,
evaluator
|
commit
.
push_data
[
:ci_yaml_file
]
=
YAML
.
dump
({
rspec:
{
script:
"ls"
}
})
commit
.
push_data
[
:ci_yaml_file
]
=
YAML
.
dump
({
rspec:
{
script:
"ls"
}
})
commit
.
save
end
end
factory
:ci_commit_with_two_jobs
do
after
(
:create
)
do
|
commit
,
evaluator
|
commit
.
push_data
[
:ci_yaml_file
]
=
YAML
.
dump
({
rspec:
{
script:
"ls"
},
spinach:
{
script:
"ls"
}
})
commit
.
push_data
[
:ci_yaml_file
]
=
YAML
.
dump
({
rspec:
{
script:
"ls"
},
spinach:
{
script:
"ls"
}
})
commit
.
save
end
end
...
...
spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
View file @
4c53cc0e
...
...
@@ -131,7 +131,7 @@ describe Ci::GitlabCiYamlProcessor do
image:
"ruby:2.1"
,
services:
[
"mysql"
],
before_script:
[
"pwd"
],
rspec:
{
image:
"ruby:2.5"
,
services:
[
"postgresql"
],
script:
"rspec"
}
rspec:
{
image:
"ruby:2.5"
,
services:
[
"postgresql"
],
script:
"rspec"
}
})
config_processor
=
GitlabCiYamlProcessor
.
new
(
config
)
...
...
@@ -176,133 +176,133 @@ describe Ci::GitlabCiYamlProcessor do
end
it
"returns errors if tags parameter is invalid"
do
config
=
YAML
.
dump
({
rspec:
{
script:
"test"
,
tags:
"mysql"
}
})
config
=
YAML
.
dump
({
rspec:
{
script:
"test"
,
tags:
"mysql"
}
})
expect
do
GitlabCiYamlProcessor
.
new
(
config
)
end
.
to
raise_error
(
GitlabCiYamlProcessor
::
ValidationError
,
"rspec job: tags parameter should be an array of strings"
)
end
it
"returns errors if before_script parameter is invalid"
do
config
=
YAML
.
dump
({
before_script:
"bundle update"
,
rspec:
{
script:
"test"
}
})
config
=
YAML
.
dump
({
before_script:
"bundle update"
,
rspec:
{
script:
"test"
}
})
expect
do
GitlabCiYamlProcessor
.
new
(
config
)
end
.
to
raise_error
(
GitlabCiYamlProcessor
::
ValidationError
,
"before_script should be an array of strings"
)
end
it
"returns errors if image parameter is invalid"
do
config
=
YAML
.
dump
({
image:
[
"test"
],
rspec:
{
script:
"test"
}
})
config
=
YAML
.
dump
({
image:
[
"test"
],
rspec:
{
script:
"test"
}
})
expect
do
GitlabCiYamlProcessor
.
new
(
config
)
end
.
to
raise_error
(
GitlabCiYamlProcessor
::
ValidationError
,
"image should be a string"
)
end
it
"returns errors if job image parameter is invalid"
do
config
=
YAML
.
dump
({
rspec:
{
script:
"test"
,
image:
[
"test"
]}
})
config
=
YAML
.
dump
({
rspec:
{
script:
"test"
,
image:
[
"test"
]
}
})
expect
do
GitlabCiYamlProcessor
.
new
(
config
)
end
.
to
raise_error
(
GitlabCiYamlProcessor
::
ValidationError
,
"rspec job: image should be a string"
)
end
it
"returns errors if services parameter is not an array"
do
config
=
YAML
.
dump
({
services:
"test"
,
rspec:
{
script:
"test"
}
})
config
=
YAML
.
dump
({
services:
"test"
,
rspec:
{
script:
"test"
}
})
expect
do
GitlabCiYamlProcessor
.
new
(
config
)
end
.
to
raise_error
(
GitlabCiYamlProcessor
::
ValidationError
,
"services should be an array of strings"
)
end
it
"returns errors if services parameter is not an array of strings"
do
config
=
YAML
.
dump
({
services:
[
10
,
"test"
],
rspec:
{
script:
"test"
}
})
config
=
YAML
.
dump
({
services:
[
10
,
"test"
],
rspec:
{
script:
"test"
}
})
expect
do
GitlabCiYamlProcessor
.
new
(
config
)
end
.
to
raise_error
(
GitlabCiYamlProcessor
::
ValidationError
,
"services should be an array of strings"
)
end
it
"returns errors if job services parameter is not an array"
do
config
=
YAML
.
dump
({
rspec:
{
script:
"test"
,
services:
"test"
}
})
config
=
YAML
.
dump
({
rspec:
{
script:
"test"
,
services:
"test"
}
})
expect
do
GitlabCiYamlProcessor
.
new
(
config
)
end
.
to
raise_error
(
GitlabCiYamlProcessor
::
ValidationError
,
"rspec job: services should be an array of strings"
)
end
it
"returns errors if job services parameter is not an array of strings"
do
config
=
YAML
.
dump
({
rspec:
{
script:
"test"
,
services:
[
10
,
"test"
]}
})
config
=
YAML
.
dump
({
rspec:
{
script:
"test"
,
services:
[
10
,
"test"
]
}
})
expect
do
GitlabCiYamlProcessor
.
new
(
config
)
end
.
to
raise_error
(
GitlabCiYamlProcessor
::
ValidationError
,
"rspec job: services should be an array of strings"
)
end
it
"returns errors if there are unknown parameters"
do
config
=
YAML
.
dump
({
extra:
"bundle update"
})
config
=
YAML
.
dump
({
extra:
"bundle update"
})
expect
do
GitlabCiYamlProcessor
.
new
(
config
)
end
.
to
raise_error
(
GitlabCiYamlProcessor
::
ValidationError
,
"Unknown parameter: extra"
)
end
it
"returns errors if there are unknown parameters that are hashes, but doesn't have a script"
do
config
=
YAML
.
dump
({
extra:
{
services:
"test"
}
})
config
=
YAML
.
dump
({
extra:
{
services:
"test"
}
})
expect
do
GitlabCiYamlProcessor
.
new
(
config
)
end
.
to
raise_error
(
GitlabCiYamlProcessor
::
ValidationError
,
"Unknown parameter: extra"
)
end
it
"returns errors if there is no any jobs defined"
do
config
=
YAML
.
dump
({
before_script:
[
"bundle update"
]
})
config
=
YAML
.
dump
({
before_script:
[
"bundle update"
]
})
expect
do
GitlabCiYamlProcessor
.
new
(
config
)
end
.
to
raise_error
(
GitlabCiYamlProcessor
::
ValidationError
,
"Please define at least one job"
)
end
it
"returns errors if job allow_failure parameter is not an boolean"
do
config
=
YAML
.
dump
({
rspec:
{
script:
"test"
,
allow_failure:
"string"
}
})
config
=
YAML
.
dump
({
rspec:
{
script:
"test"
,
allow_failure:
"string"
}
})
expect
do
GitlabCiYamlProcessor
.
new
(
config
)
end
.
to
raise_error
(
GitlabCiYamlProcessor
::
ValidationError
,
"rspec job: allow_failure parameter should be an boolean"
)
end
it
"returns errors if job stage is not a string"
do
config
=
YAML
.
dump
({
rspec:
{
script:
"test"
,
type:
1
,
allow_failure:
"string"
}
})
config
=
YAML
.
dump
({
rspec:
{
script:
"test"
,
type:
1
,
allow_failure:
"string"
}
})
expect
do
GitlabCiYamlProcessor
.
new
(
config
)
end
.
to
raise_error
(
GitlabCiYamlProcessor
::
ValidationError
,
"rspec job: stage parameter should be build, test, deploy"
)
end
it
"returns errors if job stage is not a pre-defined stage"
do
config
=
YAML
.
dump
({
rspec:
{
script:
"test"
,
type:
"acceptance"
,
allow_failure:
"string"
}
})
config
=
YAML
.
dump
({
rspec:
{
script:
"test"
,
type:
"acceptance"
,
allow_failure:
"string"
}
})
expect
do
GitlabCiYamlProcessor
.
new
(
config
)
end
.
to
raise_error
(
GitlabCiYamlProcessor
::
ValidationError
,
"rspec job: stage parameter should be build, test, deploy"
)
end
it
"returns errors if job stage is not a defined stage"
do
config
=
YAML
.
dump
({
types:
[
"build"
,
"test"
],
rspec:
{
script:
"test"
,
type:
"acceptance"
,
allow_failure:
"string"
}
})
config
=
YAML
.
dump
({
types:
[
"build"
,
"test"
],
rspec:
{
script:
"test"
,
type:
"acceptance"
,
allow_failure:
"string"
}
})
expect
do
GitlabCiYamlProcessor
.
new
(
config
)
end
.
to
raise_error
(
GitlabCiYamlProcessor
::
ValidationError
,
"rspec job: stage parameter should be build, test"
)
end
it
"returns errors if stages is not an array"
do
config
=
YAML
.
dump
({
types:
"test"
,
rspec:
{
script:
"test"
}
})
config
=
YAML
.
dump
({
types:
"test"
,
rspec:
{
script:
"test"
}
})
expect
do
GitlabCiYamlProcessor
.
new
(
config
)
end
.
to
raise_error
(
GitlabCiYamlProcessor
::
ValidationError
,
"stages should be an array of strings"
)
end
it
"returns errors if stages is not an array of strings"
do
config
=
YAML
.
dump
({
types:
[
true
,
"test"
],
rspec:
{
script:
"test"
}
})
config
=
YAML
.
dump
({
types:
[
true
,
"test"
],
rspec:
{
script:
"test"
}
})
expect
do
GitlabCiYamlProcessor
.
new
(
config
)
end
.
to
raise_error
(
GitlabCiYamlProcessor
::
ValidationError
,
"stages should be an array of strings"
)
end
it
"returns errors if variables is not a map"
do
config
=
YAML
.
dump
({
variables:
"test"
,
rspec:
{
script:
"test"
}
})
config
=
YAML
.
dump
({
variables:
"test"
,
rspec:
{
script:
"test"
}
})
expect
do
GitlabCiYamlProcessor
.
new
(
config
)
end
.
to
raise_error
(
GitlabCiYamlProcessor
::
ValidationError
,
"variables should be a map of key-valued strings"
)
end
it
"returns errors if variables is not a map of key-valued strings"
do
config
=
YAML
.
dump
({
variables:
{
test:
false
},
rspec:
{
script:
"test"
}
})
config
=
YAML
.
dump
({
variables:
{
test:
false
},
rspec:
{
script:
"test"
}
})
expect
do
GitlabCiYamlProcessor
.
new
(
config
)
end
.
to
raise_error
(
GitlabCiYamlProcessor
::
ValidationError
,
"variables should be a map of key-valued strings"
)
...
...
spec/models/ci/build_spec.rb
View file @
4c53cc0e
...
...
@@ -211,14 +211,14 @@ describe Ci::Build do
end
describe
:options
do
let
(
:options
)
{
let
(
:options
)
do
{
:image
=>
"ruby:2.1"
,
:services
=>
[
image:
"ruby:2.1"
,
services:
[
"postgres"
]
}
}
end
subject
{
build
.
options
}
it
{
is_expected
.
to
eq
(
options
)
}
...
...
@@ -308,20 +308,20 @@ describe Ci::Build do
context
'returns variables'
do
subject
{
build
.
variables
}
let
(
:variables
)
{
let
(
:variables
)
do
[
{
key: :DB_NAME
,
value:
'postgres'
,
public:
true
}
{
key: :DB_NAME
,
value:
'postgres'
,
public:
true
}
]
}
end
it
{
is_expected
.
to
eq
(
variables
)
}
context
'and secure variables'
do
let
(
:secure_variables
)
{
let
(
:secure_variables
)
do
[
{
key:
'SECRET_KEY'
,
value:
'secret_value'
,
public:
false
}
{
key:
'SECRET_KEY'
,
value:
'secret_value'
,
public:
false
}
]
}
end
before
do
build
.
project
.
variables
<<
Ci
::
Variable
.
new
(
key:
'SECRET_KEY'
,
value:
'secret_value'
)
...
...
@@ -332,11 +332,11 @@ describe Ci::Build do
context
'and trigger variables'
do
let
(
:trigger
)
{
FactoryGirl
.
create
:ci_trigger
,
project:
project
}
let
(
:trigger_request
)
{
FactoryGirl
.
create
:ci_trigger_request_with_variables
,
commit:
commit
,
trigger:
trigger
}
let
(
:trigger_variables
)
{
let
(
:trigger_variables
)
do
[
{
key: :TRIGGER_KEY
,
value:
'TRIGGER_VALUE'
,
public:
false
}
{
key: :TRIGGER_KEY
,
value:
'TRIGGER_VALUE'
,
public:
false
}
]
}
end
before
do
build
.
trigger_request
=
trigger_request
...
...
spec/models/ci/mail_service_spec.rb
View file @
4c53cc0e
...
...
@@ -75,12 +75,12 @@ describe Ci::MailService do
end
describe
'successfull build and project has email_recipients'
do
let
(
:project
)
{
let
(
:project
)
do
FactoryGirl
.
create
(
:ci_project
,
email_add_pusher:
true
,
email_only_broken_builds:
false
,
email_recipients:
"jeroen@example.com"
)
}
end
let
(
:commit
)
{
FactoryGirl
.
create
(
:ci_commit
,
project:
project
)
}
let
(
:build
)
{
FactoryGirl
.
create
(
:ci_build
,
status: :success
,
commit:
commit
)
}
...
...
@@ -103,12 +103,12 @@ describe Ci::MailService do
end
describe
'successful build and notify only broken builds'
do
let
(
:project
)
{
let
(
:project
)
do
FactoryGirl
.
create
(
:ci_project
,
email_add_pusher:
true
,
email_only_broken_builds:
true
,
email_recipients:
"jeroen@example.com"
)
}
end
let
(
:commit
)
{
FactoryGirl
.
create
(
:ci_commit
,
project:
project
)
}
let
(
:build
)
{
FactoryGirl
.
create
(
:ci_build
,
status: :success
,
commit:
commit
)
}
...
...
@@ -131,12 +131,12 @@ describe Ci::MailService do
end
describe
'successful build and can test service'
do
let
(
:project
)
{
let
(
:project
)
do
FactoryGirl
.
create
(
:ci_project
,
email_add_pusher:
true
,
email_only_broken_builds:
false
,
email_recipients:
"jeroen@example.com"
)
}
end
let
(
:commit
)
{
FactoryGirl
.
create
(
:ci_commit
,
project:
project
)
}
let
(
:build
)
{
FactoryGirl
.
create
(
:ci_build
,
status: :success
,
commit:
commit
)
}
...
...
@@ -153,12 +153,12 @@ describe Ci::MailService do
end
describe
'retried build should not receive email'
do
let
(
:project
)
{
let
(
:project
)
do
FactoryGirl
.
create
(
:ci_project
,
email_add_pusher:
true
,
email_only_broken_builds:
true
,
email_recipients:
"jeroen@example.com"
)
}
end
let
(
:commit
)
{
FactoryGirl
.
create
(
:ci_commit
,
project:
project
)
}
let
(
:build
)
{
FactoryGirl
.
create
(
:ci_build
,
status: :failed
,
commit:
commit
)
}
...
...
spec/models/ci/project_spec.rb
View file @
4c53cc0e
...
...
@@ -94,33 +94,33 @@ describe Ci::Project do
end
describe
'#broken_or_success?'
do
it
{
it
do
project
=
FactoryGirl
.
create
:ci_project
,
email_add_pusher:
true
allow
(
project
).
to
receive
(
:broken?
).
and_return
(
true
)
allow
(
project
).
to
receive
(
:success?
).
and_return
(
true
)
expect
(
project
.
broken_or_success?
).
to
eq
(
true
)
}
end
it
{
it
do
project
=
FactoryGirl
.
create
:ci_project
,
email_add_pusher:
true
allow
(
project
).
to
receive
(
:broken?
).
and_return
(
true
)
allow
(
project
).
to
receive
(
:success?
).
and_return
(
false
)
expect
(
project
.
broken_or_success?
).
to
eq
(
true
)
}
end
it
{
it
do
project
=
FactoryGirl
.
create
:ci_project
,
email_add_pusher:
true
allow
(
project
).
to
receive
(
:broken?
).
and_return
(
false
)
allow
(
project
).
to
receive
(
:success?
).
and_return
(
true
)
expect
(
project
.
broken_or_success?
).
to
eq
(
true
)
}
end
it
{
it
do
project
=
FactoryGirl
.
create
:ci_project
,
email_add_pusher:
true
allow
(
project
).
to
receive
(
:broken?
).
and_return
(
false
)
allow
(
project
).
to
receive
(
:success?
).
and_return
(
false
)
expect
(
project
.
broken_or_success?
).
to
eq
(
false
)
}
end
end
describe
'Project.parse'
do
...
...
spec/requests/ci/api/builds_spec.rb
View file @
4c53cc0e
...
...
@@ -20,7 +20,7 @@ describe Ci::API::API do
commit
.
create_builds
build
=
commit
.
builds
.
first
post
api
(
"/builds/register"
),
token:
runner
.
token
,
info:
{
platform: :darwin
}
post
api
(
"/builds/register"
),
token:
runner
.
token
,
info:
{
platform: :darwin
}
expect
(
response
.
status
).
to
eq
(
201
)
expect
(
json_response
[
'sha'
]).
to
eq
(
build
.
sha
)
...
...
@@ -55,10 +55,10 @@ describe Ci::API::API do
commit
=
FactoryGirl
.
create
(
:ci_commit
,
project:
project
)
commit
.
create_builds
post
api
(
"/builds/register"
),
token:
runner
.
token
,
info:
{
platform: :darwin
}
post
api
(
"/builds/register"
),
token:
runner
.
token
,
info:
{
platform: :darwin
}
expect
(
response
.
status
).
to
eq
(
201
)
expect
(
json_response
[
"options"
]).
to
eq
({
"image"
=>
"ruby:2.1"
,
"services"
=>
[
"postgres"
]
})
expect
(
json_response
[
"options"
]).
to
eq
({
"image"
=>
"ruby:2.1"
,
"services"
=>
[
"postgres"
]
})
end
it
"returns variables"
do
...
...
@@ -66,12 +66,12 @@ describe Ci::API::API do
commit
.
create_builds
project
.
variables
<<
Variable
.
new
(
key:
"SECRET_KEY"
,
value:
"secret_value"
)
post
api
(
"/builds/register"
),
token:
runner
.
token
,
info:
{
platform: :darwin
}
post
api
(
"/builds/register"
),
token:
runner
.
token
,
info:
{
platform: :darwin
}
expect
(
response
.
status
).
to
eq
(
201
)
expect
(
json_response
[
"variables"
]).
to
eq
([
{
"key"
=>
"DB_NAME"
,
"value"
=>
"postgres"
,
"public"
=>
true
},
{
"key"
=>
"SECRET_KEY"
,
"value"
=>
"secret_value"
,
"public"
=>
false
},
{
"key"
=>
"DB_NAME"
,
"value"
=>
"postgres"
,
"public"
=>
true
},
{
"key"
=>
"SECRET_KEY"
,
"value"
=>
"secret_value"
,
"public"
=>
false
},
])
end
...
...
@@ -83,13 +83,13 @@ describe Ci::API::API do
commit
.
create_builds
(
trigger_request
)
project
.
variables
<<
Variable
.
new
(
key:
"SECRET_KEY"
,
value:
"secret_value"
)
post
api
(
"/builds/register"
),
token:
runner
.
token
,
info:
{
platform: :darwin
}
post
api
(
"/builds/register"
),
token:
runner
.
token
,
info:
{
platform: :darwin
}
expect
(
response
.
status
).
to
eq
(
201
)
expect
(
json_response
[
"variables"
]).
to
eq
([
{
"key"
=>
"DB_NAME"
,
"value"
=>
"postgres"
,
"public"
=>
true
},
{
"key"
=>
"SECRET_KEY"
,
"value"
=>
"secret_value"
,
"public"
=>
false
},
{
"key"
=>
"TRIGGER_KEY"
,
"value"
=>
"TRIGGER_VALUE"
,
"public"
=>
false
},
{
"key"
=>
"DB_NAME"
,
"value"
=>
"postgres"
,
"public"
=>
true
},
{
"key"
=>
"SECRET_KEY"
,
"value"
=>
"secret_value"
,
"public"
=>
false
},
{
"key"
=>
"TRIGGER_KEY"
,
"value"
=>
"TRIGGER_VALUE"
,
"public"
=>
false
},
])
end
end
...
...
spec/requests/ci/api/commits_spec.rb
View file @
4c53cc0e
...
...
@@ -6,12 +6,12 @@ describe Ci::API::API, 'Commits' do
let
(
:project
)
{
FactoryGirl
.
create
(
:ci_project
)
}
let
(
:commit
)
{
FactoryGirl
.
create
(
:ci_commit
,
project:
project
)
}
let
(
:options
)
{
let
(
:options
)
do
{
project_token:
project
.
token
,
project_id:
project
.
id
}
}
end
describe
"GET /commits"
do
before
{
commit
}
...
...
@@ -27,7 +27,7 @@ describe Ci::API::API, 'Commits' do
end
describe
"POST /commits"
do
let
(
:data
)
{
let
(
:data
)
do
{
"before"
=>
"95790bf891e76fee5e1747ab589903a6a1f80f22"
,
"after"
=>
"da1560886d4f094c3e6c9ef40349f7d38b5d27d7"
,
...
...
@@ -46,7 +46,7 @@ describe Ci::API::API, 'Commits' do
],
ci_yaml_file:
gitlab_ci_yaml
}
}
end
it
"should create a build"
do
post
api
(
"/commits"
),
options
.
merge
(
data:
data
)
...
...
spec/requests/ci/api/forks_spec.rb
View file @
4c53cc0e
...
...
@@ -7,20 +7,20 @@ describe Ci::API::API do
let
(
:gitlab_url
)
{
GitlabCi
.
config
.
gitlab_server
.
url
}
let
(
:private_token
)
{
Network
.
new
.
authenticate
(
access_token:
"some_token"
)[
"private_token"
]
}
let
(
:options
)
{
let
(
:options
)
do
{
private_token:
private_token
,
url:
gitlab_url
}
}
end
before
{
before
do
stub_gitlab_calls
}
end
describe
"POST /forks"
do
let
(
:project_info
)
{
let
(
:project_info
)
do
{
project_id:
project
.
gitlab_id
,
project_token:
project
.
token
,
...
...
@@ -32,7 +32,7 @@ describe Ci::API::API do
ssh_url_to_repo:
"git@example.com:gitlab-org/underscore"
}
}
}
end
context
"with valid info"
do
before
do
...
...
spec/requests/ci/api/projects_spec.rb
View file @
4c53cc0e
...
...
@@ -6,16 +6,16 @@ describe Ci::API::API do
let
(
:gitlab_url
)
{
GitlabCi
.
config
.
gitlab_server
.
url
}
let
(
:private_token
)
{
Network
.
new
.
authenticate
(
access_token:
"some_token"
)[
"private_token"
]
}
let
(
:options
)
{
let
(
:options
)
do
{
private_token:
private_token
,
url:
gitlab_url
}
}
end
before
{
before
do
stub_gitlab_calls
}
end
context
"requests for scoped projects"
do
# NOTE: These ids are tied to the actual projects on demo.gitlab.com
...
...
@@ -75,7 +75,7 @@ describe Ci::API::API do
end
context
"Invalid Webhook URL"
do
let!
(
:webhook
)
{
{
web_hook:
"ala_ma_kota"
}
}
let!
(
:webhook
)
{
{
web_hook:
"ala_ma_kota"
}
}
before
do
options
.
merge!
(
webhook
)
...
...
@@ -116,7 +116,7 @@ describe Ci::API::API do
describe
"PUT /projects/:id"
do
let!
(
:project
)
{
FactoryGirl
.
create
(
:ci_project
)
}
let!
(
:project_info
)
{
{
name:
"An updated name!"
}
}
let!
(
:project_info
)
{
{
name:
"An updated name!"
}
}
before
do
options
.
merge!
(
project_info
)
...
...
@@ -163,14 +163,14 @@ describe Ci::API::API do
end
describe
"POST /projects"
do
let
(
:project_info
)
{
let
(
:project_info
)
do
{
name:
"My project"
,
gitlab_id:
1
,
path:
"testing/testing"
,
ssh_url_to_repo:
"ssh://example.com/testing/testing.git"
}
}
end
let
(
:invalid_project_info
)
{
{}
}
...
...
spec/requests/ci/api/runners_spec.rb
View file @
4c53cc0e
...
...
@@ -4,19 +4,19 @@ describe Ci::API::API do
include
ApiHelpers
include
StubGitlabCalls
before
{
before
do
stub_gitlab_calls
}
end
describe
"GET /runners"
do
let
(
:gitlab_url
)
{
GitlabCi
.
config
.
gitlab_server
.
url
}
let
(
:private_token
)
{
Network
.
new
.
authenticate
(
access_token:
"some_token"
)[
"private_token"
]
}
let
(
:options
)
{
let
(
:options
)
do
{
:private_token
=>
private_token
,
:url
=>
gitlab_url
private_token:
private_token
,
url:
gitlab_url
}
}
end
before
do
5
.
times
{
FactoryGirl
.
create
(
:ci_runner
)
}
...
...
spec/requests/ci/api/triggers_spec.rb
View file @
4c53cc0e
...
...
@@ -50,9 +50,9 @@ describe Ci::API::API do
end
context
'Validates variables'
do
let
(
:variables
)
{
{
'TRIGGER_KEY'
=>
'TRIGGER_VALUE'
}
}
let
(
:variables
)
do
{
'TRIGGER_KEY'
=>
'TRIGGER_VALUE'
}
end
it
'should validate variables to be a hash'
do
post
api
(
"/projects/
#{
project
.
id
}
/refs/master/trigger"
),
options
.
merge
(
variables:
'value'
)
...
...
@@ -61,7 +61,7 @@ describe Ci::API::API do
end
it
'should validate variables needs to be a map of key-valued strings'
do
post
api
(
"/projects/
#{
project
.
id
}
/refs/master/trigger"
),
options
.
merge
(
variables:
{
key:
%w(1 2)
})
post
api
(
"/projects/
#{
project
.
id
}
/refs/master/trigger"
),
options
.
merge
(
variables:
{
key:
%w(1 2)
})
expect
(
response
.
status
).
to
eq
(
400
)
expect
(
json_response
[
'message'
]).
to
eq
(
'variables needs to be a map of key-valued strings'
)
end
...
...
spec/services/ci/create_commit_service_spec.rb
View file @
4c53cc0e
...
...
@@ -36,7 +36,7 @@ describe Ci::CreateCommitService do
end
it
"creates commit if there is no appropriate job but deploy job has right ref setting"
do
config
=
YAML
.
dump
({
deploy:
{
deploy:
"ls"
,
only:
[
"0_1"
]}
})
config
=
YAML
.
dump
({
deploy:
{
deploy:
"ls"
,
only:
[
"0_1"
]
}
})
result
=
service
.
execute
(
project
,
ref:
'refs/heads/0_1'
,
...
...
@@ -51,7 +51,7 @@ describe Ci::CreateCommitService do
describe
:ci_skip?
do
it
"skips builds creation if there is [ci skip] tag in commit message"
do
commits
=
[{
message:
"some message[ci skip]"
}]
commits
=
[{
message:
"some message[ci skip]"
}]
commit
=
service
.
execute
(
project
,
ref:
'refs/tags/0_1'
,
before:
'00000000'
,
...
...
@@ -64,7 +64,7 @@ describe Ci::CreateCommitService do
end
it
"does not skips builds creation if there is no [ci skip] tag in commit message"
do
commits
=
[{
message:
"some message"
}]
commits
=
[{
message:
"some message"
}]
commit
=
service
.
execute
(
project
,
ref:
'refs/tags/0_1'
,
...
...
@@ -78,7 +78,7 @@ describe Ci::CreateCommitService do
end
it
"skips builds creation if there is [ci skip] tag in commit message and yaml is invalid"
do
commits
=
[{
message:
"some message[ci skip]"
}]
commits
=
[{
message:
"some message[ci skip]"
}]
commit
=
service
.
execute
(
project
,
ref:
'refs/tags/0_1'
,
before:
'00000000'
,
...
...
@@ -92,7 +92,7 @@ describe Ci::CreateCommitService do
end
it
"skips build creation if there are already builds"
do
commits
=
[{
message:
"message"
}]
commits
=
[{
message:
"message"
}]
commit
=
service
.
execute
(
project
,
ref:
'refs/heads/master'
,
before:
'00000000'
,
...
...
@@ -113,7 +113,7 @@ describe Ci::CreateCommitService do
end
it
"creates commit with failed status if yaml is invalid"
do
commits
=
[{
message:
"some message"
}]
commits
=
[{
message:
"some message"
}]
commit
=
service
.
execute
(
project
,
ref:
'refs/tags/0_1'
,
...
...
spec/support/stub_gitlab_calls.rb
View file @
4c53cc0e
...
...
@@ -23,21 +23,21 @@ module StubGitlabCalls
f
=
File
.
read
(
Rails
.
root
.
join
(
'spec/support/gitlab_stubs/session.json'
))
stub_request
(
:post
,
"
#{
gitlab_url
}
api/v3/session.json"
).
with
(
:body
=>
"{
\"
email
\"
:
\"
test@test.com
\"
,
\"
password
\"
:
\"
123456
\"
}"
,
:headers
=>
{
'Content-Type'
=>
'application/json'
}).
to_return
(
:status
=>
201
,
:body
=>
f
,
:headers
=>
{
'Content-Type'
=>
'application/json'
})
with
(
body:
"{
\"
email
\"
:
\"
test@test.com
\"
,
\"
password
\"
:
\"
123456
\"
}"
,
headers:
{
'Content-Type'
=>
'application/json'
}).
to_return
(
status:
201
,
body:
f
,
headers:
{
'Content-Type'
=>
'application/json'
})
end
def
stub_user
f
=
File
.
read
(
Rails
.
root
.
join
(
'spec/support/gitlab_stubs/user.json'
))
stub_request
(
:get
,
"
#{
gitlab_url
}
api/v3/user?private_token=Wvjy2Krpb7y8xi93owUz"
).
with
(
:headers
=>
{
'Content-Type'
=>
'application/json'
}).
to_return
(
:status
=>
200
,
:body
=>
f
,
:headers
=>
{
'Content-Type'
=>
'application/json'
})
with
(
headers:
{
'Content-Type'
=>
'application/json'
}).
to_return
(
status:
200
,
body:
f
,
headers:
{
'Content-Type'
=>
'application/json'
})
stub_request
(
:get
,
"
#{
gitlab_url
}
api/v3/user?access_token=some_token"
).
with
(
:headers
=>
{
'Content-Type'
=>
'application/json'
}).
to_return
(
:status
=>
200
,
:body
=>
f
,
:headers
=>
{
'Content-Type'
=>
'application/json'
})
with
(
headers:
{
'Content-Type'
=>
'application/json'
}).
to_return
(
status:
200
,
body:
f
,
headers:
{
'Content-Type'
=>
'application/json'
})
end
def
stub_project_8
...
...
@@ -54,24 +54,24 @@ module StubGitlabCalls
f
=
File
.
read
(
Rails
.
root
.
join
(
'spec/support/gitlab_stubs/projects.json'
))
stub_request
(
:get
,
"
#{
gitlab_url
}
api/v3/projects.json?archived=false&ci_enabled_first=true&private_token=Wvjy2Krpb7y8xi93owUz"
).
with
(
:headers
=>
{
'Content-Type'
=>
'application/json'
}).
to_return
(
:status
=>
200
,
:body
=>
f
,
:headers
=>
{
'Content-Type'
=>
'application/json'
})
with
(
headers:
{
'Content-Type'
=>
'application/json'
}).
to_return
(
status:
200
,
body:
f
,
headers:
{
'Content-Type'
=>
'application/json'
})
end
def
stub_projects_owned
stub_request
(
:get
,
"
#{
gitlab_url
}
api/v3/projects/owned.json?archived=false&ci_enabled_first=true&private_token=Wvjy2Krpb7y8xi93owUz"
).
with
(
:headers
=>
{
'Content-Type'
=>
'application/json'
}).
to_return
(
:status
=>
200
,
:body
=>
""
,
:headers
=>
{})
with
(
headers:
{
'Content-Type'
=>
'application/json'
}).
to_return
(
status:
200
,
body:
""
,
headers:
{})
end
def
stub_ci_enable
stub_request
(
:put
,
"
#{
gitlab_url
}
api/v3/projects/2/services/gitlab-ci.json?private_token=Wvjy2Krpb7y8xi93owUz"
).
with
(
:headers
=>
{
'Content-Type'
=>
'application/json'
}).
to_return
(
:status
=>
200
,
:body
=>
""
,
:headers
=>
{})
with
(
headers:
{
'Content-Type'
=>
'application/json'
}).
to_return
(
status:
200
,
body:
""
,
headers:
{})
end
def
project_hash_array
f
=
File
.
read
(
Rails
.
root
.
join
(
'spec/support/gitlab_stubs/projects.json'
))
return
JSON
.
parse
f
JSON
.
parse
f
end
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment