Commit ccf5b21f authored by Jacob Vosmaer's avatar Jacob Vosmaer

Remove useless "describe"

parent aae577f9
...@@ -4,195 +4,192 @@ describe 'Git HTTP requests', lib: true do ...@@ -4,195 +4,192 @@ describe 'Git HTTP requests', lib: true do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project) } let(:project) { create(:project) }
describe "#call" do context "when the project doesn't exist" do
context "when the project doesn't exist" do context "when no authentication is provided" do
context "when no authentication is provided" do it "responds with status 401" do
it "responds with status 401" do download('doesnt/exist.git') do |response|
download('doesnt/exist.git') do |response| expect(response.status).to eq(401)
expect(response.status).to eq(401)
end
end end
end end
end
context "when username and password are provided" do context "when username and password are provided" do
context "when authentication fails" do context "when authentication fails" do
it "responds with status 401" do it "responds with status 401" do
download('doesnt/exist.git', user: user.username, password: "nope") do |response| download('doesnt/exist.git', user: user.username, password: "nope") do |response|
expect(response.status).to eq(401) expect(response.status).to eq(401)
end
end end
end end
end
context "when authentication succeeds" do context "when authentication succeeds" do
it "responds with status 404" do it "responds with status 404" do
download('/doesnt/exist.git', user: user.username, password: user.password) do |response| download('/doesnt/exist.git', user: user.username, password: user.password) do |response|
expect(response.status).to eq(404) expect(response.status).to eq(404)
end
end end
end end
end end
end end
end
context "when the Wiki for a project exists" do context "when the Wiki for a project exists" do
it "responds with the right project" do it "responds with the right project" do
wiki = ProjectWiki.new(project) wiki = ProjectWiki.new(project)
project.update_attribute(:visibility_level, Project::PUBLIC) project.update_attribute(:visibility_level, Project::PUBLIC)
download("/#{wiki.repository.path_with_namespace}.git") do |response| download("/#{wiki.repository.path_with_namespace}.git") do |response|
json_body = ActiveSupport::JSON.decode(response.body) json_body = ActiveSupport::JSON.decode(response.body)
expect(response.status).to eq(200) expect(response.status).to eq(200)
expect(json_body['RepoPath']).to include(wiki.repository.path_with_namespace) expect(json_body['RepoPath']).to include(wiki.repository.path_with_namespace)
end
end end
end end
end
context "when the project exists" do context "when the project exists" do
let(:path) { "#{project.path_with_namespace}.git" } let(:path) { "#{project.path_with_namespace}.git" }
let(:env) { {} } let(:env) { {} }
context "when the project is public" do context "when the project is public" do
before do before do
project.update_attribute(:visibility_level, Project::PUBLIC) project.update_attribute(:visibility_level, Project::PUBLIC)
end
it "responds with status 200" do
download(path, env) do |response|
expect(response.status).to eq(200)
end end
end
it "responds with status 200" do
context 'but git-upload-pack is disabled' do
it "responds with status 404" do
allow(Gitlab.config.gitlab_shell).to receive(:upload_pack).and_return(false)
download(path, env) do |response| download(path, env) do |response|
expect(response.status).to eq(200) expect(response.status).to eq(404)
end end
end end
end
context 'but git-upload-pack is disabled' do end
it "responds with status 404" do
allow(Gitlab.config.gitlab_shell).to receive(:upload_pack).and_return(false)
download(path, env) do |response| context "when the project is private" do
expect(response.status).to eq(404) before do
end project.update_attribute(:visibility_level, Project::PRIVATE)
end
context "when no authentication is provided" do
it "responds with status 401" do
download(path, env) do |response|
expect(response.status).to eq(401)
end end
end end
end end
context "when the project is private" do context "when username and password are provided" do
before do let(:env) { { user: user.username, password: 'nope' } }
project.update_attribute(:visibility_level, Project::PRIVATE)
end
context "when no authentication is provided" do context "when authentication fails" do
it "responds with status 401" do it "responds with status 401" do
download(path, env) do |response| download(path, env) do |response|
expect(response.status).to eq(401) expect(response.status).to eq(401)
end end
end end
end
context "when username and password are provided" do context "when the user is IP banned" do
let(:env) { { user: user.username, password: 'nope' } }
context "when authentication fails" do
it "responds with status 401" do it "responds with status 401" do
download(path, env) do |response| expect(Rack::Attack::Allow2Ban).to receive(:filter).and_return(true)
expect(response.status).to eq(401) allow_any_instance_of(Rack::Request).to receive(:ip).and_return('1.2.3.4')
end
end
context "when the user is IP banned" do
it "responds with status 401" do
expect(Rack::Attack::Allow2Ban).to receive(:filter).and_return(true)
allow_any_instance_of(Rack::Request).to receive(:ip).and_return('1.2.3.4')
clone_get(path, env) clone_get(path, env)
expect(response.status).to eq(401) expect(response.status).to eq(401)
end
end end
end end
end
context "when authentication succeeds" do context "when authentication succeeds" do
let(:env) { { user: user.username, password: user.password } } let(:env) { { user: user.username, password: user.password } }
context "when the user has access to the project" do context "when the user has access to the project" do
before do before do
project.team << [user, :master] project.team << [user, :master]
end end
context "when the user is blocked" do context "when the user is blocked" do
it "responds with status 404" do it "responds with status 404" do
user.block user.block
project.team << [user, :master] project.team << [user, :master]
download(path, env) do |response| download(path, env) do |response|
expect(response.status).to eq(404) expect(response.status).to eq(404)
end
end end
end end
end
context "when the user isn't blocked" do context "when the user isn't blocked" do
it "responds with status 200" do it "responds with status 200" do
expect(Rack::Attack::Allow2Ban).to receive(:reset) expect(Rack::Attack::Allow2Ban).to receive(:reset)
clone_get(path, env) clone_get(path, env)
expect(response.status).to eq(200) expect(response.status).to eq(200)
end
end end
end
context "when blank password attempts follow a valid login" do context "when blank password attempts follow a valid login" do
def attempt_login(include_password) def attempt_login(include_password)
password = include_password ? user.password : "" password = include_password ? user.password : ""
clone_get path, user: user.username, password: password clone_get path, user: user.username, password: password
response.status response.status
end end
it "repeated attempts followed by successful attempt" do
options = Gitlab.config.rack_attack.git_basic_auth
maxretry = options[:maxretry] - 1
ip = '1.2.3.4'
allow_any_instance_of(Rack::Request).to receive(:ip).and_return(ip) it "repeated attempts followed by successful attempt" do
Rack::Attack::Allow2Ban.reset(ip, options) options = Gitlab.config.rack_attack.git_basic_auth
maxretry = options[:maxretry] - 1
ip = '1.2.3.4'
maxretry.times.each do allow_any_instance_of(Rack::Request).to receive(:ip).and_return(ip)
expect(attempt_login(false)).to eq(401) Rack::Attack::Allow2Ban.reset(ip, options)
end
expect(attempt_login(true)).to eq(200) maxretry.times.each do
expect(Rack::Attack::Allow2Ban.banned?(ip)).to be_falsey expect(attempt_login(false)).to eq(401)
end
maxretry.times.each do expect(attempt_login(true)).to eq(200)
expect(attempt_login(false)).to eq(401) expect(Rack::Attack::Allow2Ban.banned?(ip)).to be_falsey
end
Rack::Attack::Allow2Ban.reset(ip, options) maxretry.times.each do
expect(attempt_login(false)).to eq(401)
end end
Rack::Attack::Allow2Ban.reset(ip, options)
end end
end end
end
context "when the user doesn't have access to the project" do context "when the user doesn't have access to the project" do
it "responds with status 404" do it "responds with status 404" do
download(path, user: user.username, password: user.password) do |response| download(path, user: user.username, password: user.password) do |response|
expect(response.status).to eq(404) expect(response.status).to eq(404)
end
end end
end end
end end
end end
end
context "when a gitlab ci token is provided" do context "when a gitlab ci token is provided" do
it "responds with status 200" do it "responds with status 200" do
token = "123" token = "123"
project = FactoryGirl.create :empty_project project = FactoryGirl.create :empty_project
project.update_attributes(runners_token: token, builds_enabled: true) project.update_attributes(runners_token: token, builds_enabled: true)
clone_get "#{project.path_with_namespace}.git", user: 'gitlab-ci-token', password: token clone_get "#{project.path_with_namespace}.git", user: 'gitlab-ci-token', password: token
expect(response.status).to eq(200) expect(response.status).to eq(200)
end
end end
end end
end end
end end
def clone_get(project, options={}) def clone_get(project, options={})
get "/#{project}/info/refs", { service: 'git-upload-pack' }, auth_env(*options.values_at(:user, :password)) get "/#{project}/info/refs", { service: 'git-upload-pack' }, auth_env(*options.values_at(:user, :password))
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment