Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/spec/lib
diff options
context:
space:
mode:
authorTiger <twatson@gitlab.com>2019-03-04 03:00:40 +0300
committerTiger <twatson@gitlab.com>2019-03-20 04:04:46 +0300
commit98a14a498dc3ffe6ea8bcd7db62e8bada5d2eb45 (patch)
tree6ba7e897e543c14b8ca38216f9417964a7cd25c2 /spec/lib
parent00f0d356b71fa87f8190810b01add0cc4586e90a (diff)
Add build prerequisite for Kubernetes namespaces
Builds that have deployments require Kubernetes resources to be created before the build can be deployed. These resources are no longer created when the cluster is created, which allows us to only create the resources required by each specific build.
Diffstat (limited to 'spec/lib')
-rw-r--r--spec/lib/gitlab/ci/build/prerequisite/kubernetes_namespace_spec.rb72
1 files changed, 72 insertions, 0 deletions
diff --git a/spec/lib/gitlab/ci/build/prerequisite/kubernetes_namespace_spec.rb b/spec/lib/gitlab/ci/build/prerequisite/kubernetes_namespace_spec.rb
new file mode 100644
index 00000000000..6f6e4abc0c8
--- /dev/null
+++ b/spec/lib/gitlab/ci/build/prerequisite/kubernetes_namespace_spec.rb
@@ -0,0 +1,72 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Ci::Build::Prerequisite::KubernetesNamespace do
+ let(:build) { create(:ci_build) }
+
+ describe '#unmet?' do
+ subject { described_class.new(build).unmet? }
+
+ context 'build has no deployment' do
+ before do
+ expect(build.deployment).to be_nil
+ end
+
+ it { is_expected.to be_falsey }
+ end
+
+ context 'build has a deployment, and no existing kubernetes namespace' do
+ let!(:deployment) { create(:deployment, deployable: build) }
+ let!(:cluster) { create(:cluster, projects: [build.project]) }
+
+ before do
+ expect(build.project.kubernetes_namespaces).to be_empty
+ end
+
+ it { is_expected.to be_truthy }
+ end
+
+ context 'build has a deployment and kubernetes namespaces' do
+ let!(:deployment) { create(:deployment, deployable: build) }
+ let!(:cluster) { create(:cluster, projects: [build.project]) }
+ let!(:kubernetes_namespace) { create(:cluster_kubernetes_namespace, cluster: cluster) }
+
+ it { is_expected.to be_falsey }
+ end
+ end
+
+ describe '#complete!' do
+ let(:cluster) { create(:cluster, projects: [build.project]) }
+ let(:service) { double(execute: true) }
+
+ subject { described_class.new(build).complete! }
+
+ context 'completion is required' do
+ let!(:deployment) { create(:deployment, deployable: build) }
+
+ it 'creates a kubernetes namespace' do
+ expect(Clusters::Gcp::Kubernetes::CreateOrUpdateNamespaceService)
+ .to receive(:new)
+ .with(cluster: cluster, kubernetes_namespace: instance_of(Clusters::KubernetesNamespace))
+ .and_return(service)
+
+ expect(service).to receive(:execute).once
+
+ subject
+ end
+ end
+
+ context 'completion is not required' do
+ before do
+ expect(build.deployment).to be_nil
+ end
+
+ it 'does not create a namespace' do
+ expect(Clusters::Gcp::Kubernetes::CreateOrUpdateNamespaceService).not_to receive(:new)
+
+ subject
+ end
+ end
+ end
+end