(t *testing.T)
| 774 | } |
| 775 | |
| 776 | func TestExperimentsMetric(t *testing.T) { |
| 777 | t.Parallel() |
| 778 | |
| 779 | if len(codersdk.ExperimentsSafe) == 0 { |
| 780 | t.Skip("No experiments are currently defined; skipping test.") |
| 781 | } |
| 782 | |
| 783 | tests := []struct { |
| 784 | name string |
| 785 | experiments codersdk.Experiments |
| 786 | expected map[codersdk.Experiment]float64 |
| 787 | }{ |
| 788 | { |
| 789 | name: "Enabled experiment is exported in metrics", |
| 790 | experiments: codersdk.Experiments{ |
| 791 | codersdk.ExperimentsSafe[0], |
| 792 | }, |
| 793 | expected: map[codersdk.Experiment]float64{ |
| 794 | codersdk.ExperimentsSafe[0]: 1, |
| 795 | }, |
| 796 | }, |
| 797 | { |
| 798 | name: "Disabled experiment is exported in metrics", |
| 799 | experiments: codersdk.Experiments{}, |
| 800 | expected: map[codersdk.Experiment]float64{ |
| 801 | codersdk.ExperimentsSafe[0]: 0, |
| 802 | }, |
| 803 | }, |
| 804 | { |
| 805 | name: "Unknown experiment is not exported in metrics", |
| 806 | experiments: codersdk.Experiments{codersdk.Experiment("bob")}, |
| 807 | expected: map[codersdk.Experiment]float64{}, |
| 808 | }, |
| 809 | } |
| 810 | |
| 811 | for _, tc := range tests { |
| 812 | t.Run(tc.name, func(t *testing.T) { |
| 813 | t.Parallel() |
| 814 | reg := prometheus.NewRegistry() |
| 815 | |
| 816 | require.NoError(t, prometheusmetrics.Experiments(reg, tc.experiments)) |
| 817 | |
| 818 | out, err := reg.Gather() |
| 819 | require.NoError(t, err) |
| 820 | require.Lenf(t, out, 1, "unexpected number of registered metrics") |
| 821 | |
| 822 | seen := make(map[codersdk.Experiment]float64) |
| 823 | |
| 824 | for _, metric := range out[0].GetMetric() { |
| 825 | require.Equal(t, "coderd_experiments", out[0].GetName()) |
| 826 | |
| 827 | labels := metric.GetLabel() |
| 828 | require.Lenf(t, labels, 1, "unexpected number of labels") |
| 829 | |
| 830 | experiment := codersdk.Experiment(labels[0].GetValue()) |
| 831 | value := metric.GetGauge().GetValue() |
| 832 | |
| 833 | seen[experiment] = value |
nothing calls this directly
no test coverage detected