summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-01-25 09:08:46 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-01-25 09:08:46 +0000
commit35487a1e925f7b4ec72a3d0cdde94f92582d2087 (patch)
tree5cb21f3e13cea333acc0101a45d92b237a78fd5e
parent4f749a9b30a638f0bd3a19e8d9925e966b0f5cb4 (diff)
downloadgitlab-ce-35487a1e925f7b4ec72a3d0cdde94f92582d2087.tar.gz
Add latest changes from gitlab-org/gitlab@master
-rw-r--r--app/models/serverless/domain_cluster.rb9
-rw-r--r--lib/gitlab/prometheus/queries/knative_invocation_query.rb2
-rw-r--r--lib/gitlab/serverless/domain.rb13
-rw-r--r--spec/factories/serverless/domain_cluster.rb1
-rw-r--r--spec/lib/gitlab/serverless/domain_spec.rb22
-rw-r--r--spec/models/serverless/domain_cluster_spec.rb31
6 files changed, 72 insertions, 6 deletions
diff --git a/app/models/serverless/domain_cluster.rb b/app/models/serverless/domain_cluster.rb
index a8365649dd1..44463a56327 100644
--- a/app/models/serverless/domain_cluster.rb
+++ b/app/models/serverless/domain_cluster.rb
@@ -4,11 +4,16 @@ module Serverless
class DomainCluster < ApplicationRecord
self.table_name = 'serverless_domain_cluster'
+ HEX_REGEXP = %r{\A\h+\z}.freeze
+
belongs_to :pages_domain
belongs_to :knative, class_name: 'Clusters::Applications::Knative', foreign_key: 'clusters_applications_knative_id'
belongs_to :creator, class_name: 'User', optional: true
- validates :pages_domain, :knative, :uuid, presence: true
- validates :uuid, uniqueness: true, length: { is: 14 }
+ validates :pages_domain, :knative, presence: true
+ validates :uuid, presence: true, uniqueness: true, length: { is: Gitlab::Serverless::Domain::UUID_LENGTH },
+ format: { with: HEX_REGEXP, message: 'only allows hex characters' }
+
+ default_value_for(:uuid, allows_nil: false) { Gitlab::Serverless::Domain.generate_uuid }
end
end
diff --git a/lib/gitlab/prometheus/queries/knative_invocation_query.rb b/lib/gitlab/prometheus/queries/knative_invocation_query.rb
index 8873608c411..abc90bad9c3 100644
--- a/lib/gitlab/prometheus/queries/knative_invocation_query.rb
+++ b/lib/gitlab/prometheus/queries/knative_invocation_query.rb
@@ -20,7 +20,7 @@ module Gitlab
protected
def context(function_id)
- function = Serverless::Function.find_by_id(function_id)
+ function = ::Serverless::Function.find_by_id(function_id)
{
function_name: function.name,
kube_namespace: function.namespace
diff --git a/lib/gitlab/serverless/domain.rb b/lib/gitlab/serverless/domain.rb
new file mode 100644
index 00000000000..ec7c68764d1
--- /dev/null
+++ b/lib/gitlab/serverless/domain.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Serverless
+ class Domain
+ UUID_LENGTH = 14
+
+ def self.generate_uuid
+ SecureRandom.hex(UUID_LENGTH / 2)
+ end
+ end
+ end
+end
diff --git a/spec/factories/serverless/domain_cluster.rb b/spec/factories/serverless/domain_cluster.rb
index 5adfcacbd7f..24893f4a613 100644
--- a/spec/factories/serverless/domain_cluster.rb
+++ b/spec/factories/serverless/domain_cluster.rb
@@ -5,6 +5,5 @@ FactoryBot.define do
pages_domain { create(:pages_domain) }
knative { create(:clusters_applications_knative) }
creator { create(:user) }
- uuid { SecureRandom.hex(7) }
end
end
diff --git a/spec/lib/gitlab/serverless/domain_spec.rb b/spec/lib/gitlab/serverless/domain_spec.rb
new file mode 100644
index 00000000000..ae5551977d4
--- /dev/null
+++ b/spec/lib/gitlab/serverless/domain_spec.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::Serverless::Domain do
+ describe '.generate_uuid' do
+ it 'has 14 characters' do
+ expect(described_class.generate_uuid.length).to eq(described_class::UUID_LENGTH)
+ end
+
+ it 'consists of only hexadecimal characters' do
+ expect(described_class.generate_uuid).to match(/\A\h+\z/)
+ end
+
+ it 'uses random characters' do
+ uuid = 'abcd1234567890'
+
+ expect(SecureRandom).to receive(:hex).with(described_class::UUID_LENGTH / 2).and_return(uuid)
+ expect(described_class.generate_uuid).to eq(uuid)
+ end
+ end
+end
diff --git a/spec/models/serverless/domain_cluster_spec.rb b/spec/models/serverless/domain_cluster_spec.rb
index 73d7d64d35e..b5ed1df4f45 100644
--- a/spec/models/serverless/domain_cluster_spec.rb
+++ b/spec/models/serverless/domain_cluster_spec.rb
@@ -8,10 +8,17 @@ describe Serverless::DomainCluster do
describe 'validations' do
it { is_expected.to validate_presence_of(:pages_domain) }
it { is_expected.to validate_presence_of(:knative) }
- it { is_expected.to validate_presence_of(:uuid) }
+ it { is_expected.to validate_presence_of(:uuid) }
+ it { is_expected.to validate_length_of(:uuid).is_equal_to(Gitlab::Serverless::Domain::UUID_LENGTH) }
it { is_expected.to validate_uniqueness_of(:uuid) }
- it { is_expected.to validate_length_of(:uuid).is_equal_to(14) }
+
+ it 'validates that uuid has only hex characters' do
+ subject = build(:serverless_domain_cluster, uuid: 'z1234567890123')
+ subject.valid?
+
+ expect(subject.errors[:uuid]).to include('only allows hex characters')
+ end
end
describe 'associations' do
@@ -19,4 +26,24 @@ describe Serverless::DomainCluster do
it { is_expected.to belong_to(:knative) }
it { is_expected.to belong_to(:creator).optional }
end
+
+ describe 'uuid' do
+ context 'when nil' do
+ it 'generates a value by default' do
+ attributes = build(:serverless_domain_cluster).attributes.merge(uuid: nil)
+ expect(Gitlab::Serverless::Domain).to receive(:generate_uuid).and_call_original
+
+ subject = Serverless::DomainCluster.new(attributes)
+
+ expect(subject.uuid).not_to be_blank
+ end
+ end
+
+ context 'when not nil' do
+ it 'does not override the existing value' do
+ uuid = 'abcd1234567890'
+ expect(build(:serverless_domain_cluster, uuid: uuid).uuid).to eq(uuid)
+ end
+ end
+ end
end