132 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
require 'spec_helper'
 | 
						|
 | 
						|
RSpec.describe Gitlab::Kubernetes::RolloutInstances do
 | 
						|
  include KubernetesHelpers
 | 
						|
 | 
						|
  def setup(deployments_attrs, pods_attrs)
 | 
						|
    deployments = deployments_attrs.map do |attrs|
 | 
						|
      ::Gitlab::Kubernetes::Deployment.new(attrs, pods: pods_attrs)
 | 
						|
    end
 | 
						|
 | 
						|
    pods = pods_attrs.map do |attrs|
 | 
						|
      ::Gitlab::Kubernetes::Pod.new(attrs)
 | 
						|
    end
 | 
						|
 | 
						|
    [deployments, pods]
 | 
						|
  end
 | 
						|
 | 
						|
  describe '#pod_instances' do
 | 
						|
    it 'returns an instance for a deployment with one pod' do
 | 
						|
      deployments, pods = setup(
 | 
						|
        [kube_deployment(name: 'one', track: 'stable', replicas: 1)],
 | 
						|
        [kube_pod(name: 'one', status: 'Running', track: 'stable')]
 | 
						|
      )
 | 
						|
      rollout_instances = described_class.new(deployments, pods)
 | 
						|
 | 
						|
      expect(rollout_instances.pod_instances).to eq([{
 | 
						|
        pod_name: 'one',
 | 
						|
        stable: true,
 | 
						|
        status: 'running',
 | 
						|
        tooltip: 'one (Running)',
 | 
						|
        track: 'stable'
 | 
						|
      }])
 | 
						|
    end
 | 
						|
 | 
						|
    it 'returns a pending pod for a missing replica' do
 | 
						|
      deployments, pods = setup(
 | 
						|
        [kube_deployment(name: 'one', track: 'stable', replicas: 1)],
 | 
						|
        []
 | 
						|
      )
 | 
						|
      rollout_instances = described_class.new(deployments, pods)
 | 
						|
 | 
						|
      expect(rollout_instances.pod_instances).to eq([{
 | 
						|
        pod_name: 'Not provided',
 | 
						|
        stable: true,
 | 
						|
        status: 'pending',
 | 
						|
        tooltip: 'Not provided (Pending)',
 | 
						|
        track: 'stable'
 | 
						|
      }])
 | 
						|
    end
 | 
						|
 | 
						|
    it 'returns instances when there are two stable deployments' do
 | 
						|
      deployments, pods = setup(
 | 
						|
        [
 | 
						|
          kube_deployment(name: 'one', track: 'stable', replicas: 1),
 | 
						|
          kube_deployment(name: 'two', track: 'stable', replicas: 1)
 | 
						|
        ], [
 | 
						|
          kube_pod(name: 'one', status: 'Running', track: 'stable'),
 | 
						|
          kube_pod(name: 'two', status: 'Running', track: 'stable')
 | 
						|
        ])
 | 
						|
      rollout_instances = described_class.new(deployments, pods)
 | 
						|
 | 
						|
      expect(rollout_instances.pod_instances).to eq([{
 | 
						|
        pod_name: 'one',
 | 
						|
        stable: true,
 | 
						|
        status: 'running',
 | 
						|
        tooltip: 'one (Running)',
 | 
						|
        track: 'stable'
 | 
						|
      }, {
 | 
						|
        pod_name: 'two',
 | 
						|
        stable: true,
 | 
						|
        status: 'running',
 | 
						|
        tooltip: 'two (Running)',
 | 
						|
        track: 'stable'
 | 
						|
      }])
 | 
						|
    end
 | 
						|
 | 
						|
    it 'returns instances for two deployments with different tracks' do
 | 
						|
      deployments, pods = setup(
 | 
						|
        [
 | 
						|
          kube_deployment(name: 'one', track: 'mytrack', replicas: 1),
 | 
						|
          kube_deployment(name: 'two', track: 'othertrack', replicas: 1)
 | 
						|
        ], [
 | 
						|
          kube_pod(name: 'one', status: 'Running', track: 'mytrack'),
 | 
						|
          kube_pod(name: 'two', status: 'Running', track: 'othertrack')
 | 
						|
        ])
 | 
						|
      rollout_instances = described_class.new(deployments, pods)
 | 
						|
 | 
						|
      expect(rollout_instances.pod_instances).to eq([{
 | 
						|
        pod_name: 'one',
 | 
						|
        stable: false,
 | 
						|
        status: 'running',
 | 
						|
        tooltip: 'one (Running)',
 | 
						|
        track: 'mytrack'
 | 
						|
      }, {
 | 
						|
        pod_name: 'two',
 | 
						|
        stable: false,
 | 
						|
        status: 'running',
 | 
						|
        tooltip: 'two (Running)',
 | 
						|
        track: 'othertrack'
 | 
						|
      }])
 | 
						|
    end
 | 
						|
 | 
						|
    it 'sorts stable tracks after canary tracks' do
 | 
						|
      deployments, pods = setup(
 | 
						|
        [
 | 
						|
          kube_deployment(name: 'one', track: 'stable', replicas: 1),
 | 
						|
          kube_deployment(name: 'two', track: 'canary', replicas: 1)
 | 
						|
        ], [
 | 
						|
          kube_pod(name: 'one', status: 'Running', track: 'stable'),
 | 
						|
          kube_pod(name: 'two', status: 'Running', track: 'canary')
 | 
						|
        ])
 | 
						|
      rollout_instances = described_class.new(deployments, pods)
 | 
						|
 | 
						|
      expect(rollout_instances.pod_instances).to eq([{
 | 
						|
        pod_name: 'two',
 | 
						|
        stable: false,
 | 
						|
        status: 'running',
 | 
						|
        tooltip: 'two (Running)',
 | 
						|
        track: 'canary'
 | 
						|
      }, {
 | 
						|
        pod_name: 'one',
 | 
						|
        stable: true,
 | 
						|
        status: 'running',
 | 
						|
        tooltip: 'one (Running)',
 | 
						|
        track: 'stable'
 | 
						|
      }])
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |