2020-03-13 15:44:24 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require 'spec_helper'
|
|
|
|
|
2020-07-28 23:09:34 +05:30
|
|
|
RSpec.describe Gitlab::Serverless::Service do
|
2020-03-13 15:44:24 +05:30
|
|
|
let(:cluster) { create(:cluster) }
|
|
|
|
let(:environment) { create(:environment) }
|
|
|
|
let(:attributes) do
|
|
|
|
{
|
|
|
|
'apiVersion' => 'serving.knative.dev/v1alpha1',
|
|
|
|
'kind' => 'Service',
|
|
|
|
'metadata' => {
|
|
|
|
'creationTimestamp' => '2019-10-22T21:19:13Z',
|
|
|
|
'name' => 'kubetest',
|
|
|
|
'namespace' => 'project1-1-environment1'
|
|
|
|
},
|
|
|
|
'spec' => {
|
|
|
|
'runLatest' => {
|
|
|
|
'configuration' => {
|
|
|
|
'build' => {
|
|
|
|
'template' => {
|
|
|
|
'name' => 'some-image'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
'environment_scope' => '*',
|
|
|
|
'cluster' => cluster,
|
|
|
|
'environment' => environment,
|
|
|
|
'podcount' => 0
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'exposes methods extracting data from the attributes hash' do
|
|
|
|
service = Gitlab::Serverless::Service.new(attributes)
|
|
|
|
|
|
|
|
expect(service.name).to eq('kubetest')
|
|
|
|
expect(service.namespace).to eq('project1-1-environment1')
|
|
|
|
expect(service.environment_scope).to eq('*')
|
|
|
|
expect(service.podcount).to eq(0)
|
|
|
|
expect(service.created_at).to eq(DateTime.parse('2019-10-22T21:19:13Z'))
|
|
|
|
expect(service.image).to eq('some-image')
|
|
|
|
expect(service.cluster).to eq(cluster)
|
|
|
|
expect(service.environment).to eq(environment)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'returns nil for missing attributes' do
|
|
|
|
service = Gitlab::Serverless::Service.new({})
|
|
|
|
|
|
|
|
[:name, :namespace, :environment_scope, :cluster, :podcount, :created_at, :image, :description, :url, :environment].each do |method|
|
|
|
|
expect(service.send(method)).to be_nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe '#description' do
|
|
|
|
it 'extracts the description in knative 7 format if available' do
|
|
|
|
attributes = {
|
|
|
|
'spec' => {
|
|
|
|
'template' => {
|
|
|
|
'metadata' => {
|
|
|
|
'annotations' => {
|
|
|
|
'Description' => 'some description'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
service = Gitlab::Serverless::Service.new(attributes)
|
|
|
|
|
|
|
|
expect(service.description).to eq('some description')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'extracts the description in knative 5/6 format if 7 is not available' do
|
|
|
|
attributes = {
|
|
|
|
'spec' => {
|
|
|
|
'runLatest' => {
|
|
|
|
'configuration' => {
|
|
|
|
'revisionTemplate' => {
|
|
|
|
'metadata' => {
|
|
|
|
'annotations' => {
|
|
|
|
'Description' => 'some description'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
service = Gitlab::Serverless::Service.new(attributes)
|
|
|
|
|
|
|
|
expect(service.description).to eq('some description')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe '#url' do
|
2020-04-08 14:13:33 +05:30
|
|
|
let(:serverless_domain) { instance_double(::Serverless::Domain, uri: URI('https://proxy.example.com')) }
|
|
|
|
|
2020-03-13 15:44:24 +05:30
|
|
|
it 'returns proxy URL if cluster has serverless domain' do
|
|
|
|
# cluster = create(:cluster)
|
|
|
|
knative = create(:clusters_applications_knative, :installed, cluster: cluster)
|
|
|
|
create(:serverless_domain_cluster, clusters_applications_knative_id: knative.id)
|
|
|
|
service = Gitlab::Serverless::Service.new(attributes.merge('cluster' => cluster))
|
|
|
|
|
2020-04-08 14:13:33 +05:30
|
|
|
expect(::Serverless::Domain).to receive(:new).with(
|
|
|
|
function_name: service.name,
|
|
|
|
serverless_domain_cluster: service.cluster.serverless_domain,
|
2020-03-13 15:44:24 +05:30
|
|
|
environment: service.environment
|
2020-04-08 14:13:33 +05:30
|
|
|
).and_return(serverless_domain)
|
2020-03-13 15:44:24 +05:30
|
|
|
|
|
|
|
expect(service.url).to eq('https://proxy.example.com')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'returns the URL from the knative 6/7 format' do
|
|
|
|
attributes = {
|
|
|
|
'status' => {
|
|
|
|
'url' => 'https://example.com'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
service = Gitlab::Serverless::Service.new(attributes)
|
|
|
|
|
|
|
|
expect(service.url).to eq('https://example.com')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'returns the URL from the knative 5 format' do
|
|
|
|
attributes = {
|
|
|
|
'status' => {
|
|
|
|
'domain' => 'example.com'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
service = Gitlab::Serverless::Service.new(attributes)
|
|
|
|
|
|
|
|
expect(service.url).to eq('http://example.com')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|