1
// Copyright 2013 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
9
jc "github.com/juju/testing/checkers"
10
"github.com/juju/utils"
11
gc "gopkg.in/check.v1"
13
"github.com/juju/juju/state"
16
type BenchmarkSuite struct {
19
var _ = gc.Suite(&BenchmarkSuite{})
21
func (*BenchmarkSuite) BenchmarkAddUnit(c *gc.C) {
22
// TODO(rog) embed ConnSuite in BenchmarkSuite when
23
// gocheck calls appropriate fixture methods for benchmark
27
defer s.TearDownSuite(c)
29
defer s.TearDownTest(c)
30
charm := s.AddTestingCharm(c, "wordpress")
31
svc := s.AddTestingService(c, "wordpress", charm)
33
for i := 0; i < c.N; i++ {
34
_, err := svc.AddUnit()
35
c.Assert(err, jc.ErrorIsNil)
39
func (*BenchmarkSuite) BenchmarkAddAndAssignUnit(c *gc.C) {
42
defer s.TearDownSuite(c)
44
defer s.TearDownTest(c)
45
charm := s.AddTestingCharm(c, "wordpress")
46
svc := s.AddTestingService(c, "wordpress", charm)
48
for i := 0; i < c.N; i++ {
49
unit, err := svc.AddUnit()
50
c.Assert(err, jc.ErrorIsNil)
51
err = s.State.AssignUnit(unit, state.AssignClean)
52
c.Assert(err, jc.ErrorIsNil)
56
func (*BenchmarkSuite) BenchmarkAddMetrics1_1(c *gc.C) { benchmarkAddMetrics(1, 1, c) }
57
func (*BenchmarkSuite) BenchmarkAddMetrics1_10(c *gc.C) { benchmarkAddMetrics(1, 10, c) }
58
func (*BenchmarkSuite) BenchmarkAddMetrics1_100(c *gc.C) { benchmarkAddMetrics(1, 100, c) }
59
func (*BenchmarkSuite) BenchmarkAddMetrics100_1(c *gc.C) { benchmarkAddMetrics(100, 1, c) }
60
func (*BenchmarkSuite) BenchmarkAddMetrics100_10(c *gc.C) { benchmarkAddMetrics(100, 10, c) }
61
func (*BenchmarkSuite) BenchmarkAddMetrics100_100(c *gc.C) { benchmarkAddMetrics(100, 100, c) }
62
func (*BenchmarkSuite) BenchmarkAddMetrics10_1(c *gc.C) { benchmarkAddMetrics(10, 1, c) }
63
func (*BenchmarkSuite) BenchmarkAddMetrics10_10(c *gc.C) { benchmarkAddMetrics(10, 10, c) }
64
func (*BenchmarkSuite) BenchmarkAddMetrics10_100(c *gc.C) { benchmarkAddMetrics(10, 100, c) }
66
func benchmarkAddMetrics(metricsPerBatch, batches int, c *gc.C) {
69
defer s.TearDownSuite(c)
71
defer s.TearDownTest(c)
73
metrics := make([]state.Metric, metricsPerBatch)
74
for i := range metrics {
75
metrics[i] = state.Metric{
81
charm := s.AddTestingCharm(c, "wordpress")
82
svc := s.AddTestingService(c, "wordpress", charm)
83
unit, err := svc.AddUnit()
84
c.Assert(err, jc.ErrorIsNil)
85
serviceCharmURL, _ := svc.CharmURL()
86
err = unit.SetCharmURL(serviceCharmURL)
87
c.Assert(err, jc.ErrorIsNil)
89
for i := 0; i < c.N; i++ {
90
for n := 0; n < batches; n++ {
91
_, err := s.State.AddMetrics(
93
UUID: utils.MustNewUUID().String(),
95
CharmURL: serviceCharmURL.String(),
100
c.Assert(err, jc.ErrorIsNil)
105
// BenchmarkCleanupMetrics needs to add metrics each time over the cycle.
106
// Because of this the benchmark includes addmetric time
107
func (*BenchmarkSuite) BenchmarkCleanupMetrics(c *gc.C) {
108
numberOfMetrics := 50
111
defer s.TearDownSuite(c)
113
defer s.TearDownTest(c)
114
oldTime := time.Now().Add(-(state.CleanupAge))
115
charm := s.AddTestingCharm(c, "wordpress")
116
svc := s.AddTestingService(c, "wordpress", charm)
117
unit, err := svc.AddUnit()
118
c.Assert(err, jc.ErrorIsNil)
119
serviceCharmURL, _ := svc.CharmURL()
120
err = unit.SetCharmURL(serviceCharmURL)
121
c.Assert(err, jc.ErrorIsNil)
123
for i := 0; i < c.N; i++ {
124
for i := 0; i < numberOfMetrics; i++ {
125
m, err := s.State.AddMetrics(
127
UUID: utils.MustNewUUID().String(),
129
CharmURL: serviceCharmURL.String(),
130
Metrics: []state.Metric{{}},
131
Unit: unit.UnitTag(),
134
c.Assert(err, jc.ErrorIsNil)
135
err = m.SetSent(time.Now())
136
c.Assert(err, jc.ErrorIsNil)
138
err := s.State.CleanupOldMetrics()
139
c.Assert(err, jc.ErrorIsNil)