usage_data_spec.rb 7.5 KB
Newer Older
1 2 3
require 'spec_helper'

describe Gitlab::UsageData do
4 5
  let(:projects) { create_list(:project, 3) }
  let!(:board) { create(:board, project: projects[0]) }
6 7

  describe '#data' do
8 9 10
    before do
      create(:jira_service, project: projects[0])
      create(:jira_service, project: projects[1])
11
      create(:jira_cloud_service, project: projects[2])
12 13 14 15
      create(:prometheus_service, project: projects[1])
      create(:service, project: projects[0], type: 'SlackSlashCommandsService', active: true)
      create(:service, project: projects[1], type: 'SlackService', active: true)
      create(:service, project: projects[2], type: 'SlackService', active: true)
16 17 18 19

      gcp_cluster = create(:cluster, :provided_by_gcp)
      create(:cluster, :provided_by_user)
      create(:cluster, :provided_by_user, :disabled)
20 21 22
      create(:cluster, :group)
      create(:cluster, :group, :disabled)
      create(:cluster, :group, :disabled)
23 24
      create(:clusters_applications_helm, :installed, cluster: gcp_cluster)
      create(:clusters_applications_ingress, :installed, cluster: gcp_cluster)
A
Amit Rathi 已提交
25
      create(:clusters_applications_cert_managers, :installed, cluster: gcp_cluster)
26 27
      create(:clusters_applications_prometheus, :installed, cluster: gcp_cluster)
      create(:clusters_applications_runner, :installed, cluster: gcp_cluster)
28
      create(:clusters_applications_knative, :installed, cluster: gcp_cluster)
29 30
    end

31
    subject { described_class.data }
32 33 34 35 36 37

    it "gathers usage data" do
      expect(subject.keys).to match_array(%i(
        active_user_count
        counts
        recorded_at
S
Sean McGivern 已提交
38
        edition
39
        version
40
        installation_type
41
        uuid
S
Sean McGivern 已提交
42
        hostname
43 44 45 46 47 48 49 50
        mattermost_enabled
        signup_enabled
        ldap_enabled
        gravatar_enabled
        omniauth_enabled
        reply_by_email_enabled
        container_registry_enabled
        gitlab_shared_runners_enabled
51 52 53
        gitlab_pages
        git
        database
54
        avg_cycle_analytics
T
Tiago Botelho 已提交
55
        web_ide_commits
56 57 58 59 60 61 62
      ))
    end

    it "gathers usage counts" do
      count_data = subject[:counts]

      expect(count_data[:boards]).to eq(1)
63
      expect(count_data[:projects]).to eq(3)
64 65

      expect(count_data.keys).to match_array(%i(
66
        assignee_lists
67 68
        boards
        ci_builds
69 70
        ci_internal_pipelines
        ci_external_pipelines
71 72
        ci_pipeline_config_auto_devops
        ci_pipeline_config_repository
73 74
        ci_runners
        ci_triggers
75
        ci_pipeline_schedules
76 77
        auto_devops_enabled
        auto_devops_disabled
78 79 80
        deploy_keys
        deployments
        environments
81 82
        clusters
        clusters_enabled
83 84
        project_clusters_enabled
        group_clusters_enabled
85
        clusters_disabled
86 87
        project_clusters_disabled
        group_clusters_disabled
88 89 90 91
        clusters_platforms_gke
        clusters_platforms_user
        clusters_applications_helm
        clusters_applications_ingress
A
Amit Rathi 已提交
92
        clusters_applications_cert_managers
93 94
        clusters_applications_prometheus
        clusters_applications_runner
95
        clusters_applications_knative
96
        in_review_folder
97 98 99
        groups
        issues
        keys
100
        label_lists
101 102 103
        labels
        lfs_objects
        merge_requests
104
        milestone_lists
105 106 107
        milestones
        notes
        projects
108
        projects_imported_from_github
109
        projects_jira_active
110 111
        projects_jira_server_active
        projects_jira_cloud_active
112 113
        projects_slack_notifications_active
        projects_slack_slash_active
114
        projects_prometheus_active
115 116 117
        pages_domains
        protected_branches
        releases
118
        remote_mirrors
119 120
        snippets
        todos
R
Robert Speicher 已提交
121
        uploads
122 123 124
        web_hooks
      ))
    end
125 126 127 128 129 130

    it 'gathers projects data correctly' do
      count_data = subject[:counts]

      expect(count_data[:projects]).to eq(3)
      expect(count_data[:projects_prometheus_active]).to eq(1)
131 132 133
      expect(count_data[:projects_jira_active]).to eq(3)
      expect(count_data[:projects_jira_server_active]).to eq(2)
      expect(count_data[:projects_jira_cloud_active]).to eq(1)
134 135
      expect(count_data[:projects_slack_notifications_active]).to eq(2)
      expect(count_data[:projects_slack_slash_active]).to eq(1)
136

137 138 139 140 141 142 143
      expect(count_data[:clusters_enabled]).to eq(7)
      expect(count_data[:project_clusters_enabled]).to eq(6)
      expect(count_data[:group_clusters_enabled]).to eq(1)
      expect(count_data[:clusters_disabled]).to eq(3)
      expect(count_data[:project_clusters_disabled]).to eq(1)
      expect(count_data[:group_clusters_disabled]).to eq(2)
      expect(count_data[:group_clusters_enabled]).to eq(1)
144 145 146 147
      expect(count_data[:clusters_platforms_gke]).to eq(1)
      expect(count_data[:clusters_platforms_user]).to eq(1)
      expect(count_data[:clusters_applications_helm]).to eq(1)
      expect(count_data[:clusters_applications_ingress]).to eq(1)
A
Amit Rathi 已提交
148
      expect(count_data[:clusters_applications_cert_managers]).to eq(1)
149 150
      expect(count_data[:clusters_applications_prometheus]).to eq(1)
      expect(count_data[:clusters_applications_runner]).to eq(1)
151
      expect(count_data[:clusters_applications_knative]).to eq(1)
152
    end
153 154 155 156 157 158 159

    it 'works when queries time out' do
      allow_any_instance_of(ActiveRecord::Relation)
        .to receive(:count).and_raise(ActiveRecord::StatementInvalid.new(''))

      expect { subject }.not_to raise_error
    end
160 161
  end

162 163 164 165
  describe '#features_usage_data_ce' do
    subject { described_class.features_usage_data_ce }

    it 'gathers feature usage data' do
166 167 168 169
      expect(subject[:mattermost_enabled]).to eq(Gitlab.config.mattermost.enabled)
      expect(subject[:signup_enabled]).to eq(Gitlab::CurrentSettings.allow_signup?)
      expect(subject[:ldap_enabled]).to eq(Gitlab.config.ldap.enabled)
      expect(subject[:gravatar_enabled]).to eq(Gitlab::CurrentSettings.gravatar_enabled?)
170
      expect(subject[:omniauth_enabled]).to eq(Gitlab::Auth.omniauth_enabled?)
171 172 173
      expect(subject[:reply_by_email_enabled]).to eq(Gitlab::IncomingEmail.enabled?)
      expect(subject[:container_registry_enabled]).to eq(Gitlab.config.registry.enabled)
      expect(subject[:gitlab_shared_runners_enabled]).to eq(Gitlab.config.gitlab_ci.shared_runners_enabled)
174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
    end
  end

  describe '#components_usage_data' do
    subject { described_class.components_usage_data }

    it 'gathers components usage data' do
      expect(subject[:gitlab_pages][:enabled]).to eq(Gitlab.config.pages.enabled)
      expect(subject[:gitlab_pages][:version]).to eq(Gitlab::Pages::VERSION)
      expect(subject[:git][:version]).to eq(Gitlab::Git.version)
      expect(subject[:database][:adapter]).to eq(Gitlab::Database.adapter_name)
      expect(subject[:database][:version]).to eq(Gitlab::Database.version)
    end
  end

189
  describe '#license_usage_data' do
190
    subject { described_class.license_usage_data }
191 192

    it "gathers license data" do
193
      expect(subject[:uuid]).to eq(Gitlab::CurrentSettings.uuid)
194
      expect(subject[:version]).to eq(Gitlab::VERSION)
195
      expect(subject[:installation_type]).to eq(Gitlab::INSTALLATION_TYPE)
196 197 198 199
      expect(subject[:active_user_count]).to eq(User.active.count)
      expect(subject[:recorded_at]).to be_a(Time)
    end
  end
200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215

  describe '#count' do
    let(:relation) { double(:relation) }

    it 'returns the count when counting succeeds' do
      allow(relation).to receive(:count).and_return(1)

      expect(described_class.count(relation)).to eq(1)
    end

    it 'returns the fallback value when counting fails' do
      allow(relation).to receive(:count).and_raise(ActiveRecord::StatementInvalid.new(''))

      expect(described_class.count(relation, fallback: 15)).to eq(15)
    end
  end
216
end