mirror of
https://github.com/prometheus/prometheus.git
synced 2025-02-21 03:16:00 -08:00
- Mostly docstring fixed/additions. (Please review these carefully, since most of them were missing, I had to guess them from an outsider's perspective. (Which on the other hand proves how desperately required many of these docstrings are.)) - Removed all uses of new(...) to meet our own style guide (draft). - Fixed all other 'go vet' and 'golint' issues (except those that are not fixable (i.e. caused by bugs in or by design of 'go vet' and 'golint')). - Some trivial refactorings, like reorder functions, minor renames, ... - Some slightly less trivial refactoring, mostly to reduce code duplication by embedding types instead of writing many explicit forwarders. - Cleaned up the interface structure a bit. (Most significant probably the removal of the View-like methods from MetricPersistenc. Now they are only in View and not duplicated anymore.) - Removed dead code. (Probably not all of it, but it's a first step...) - Fixed a leftover in storage/metric/end_to_end_test.go (that made some parts of the code never execute (incidentally, those parts were broken (and I fixed them, too))). Change-Id: Ibcac069940d118a88f783314f5b4595dce6641d5
116 lines
2.8 KiB
Go
116 lines
2.8 KiB
Go
// Copyright 2013 Prometheus Team
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package test
|
|
|
|
import (
|
|
"code.google.com/p/goprotobuf/proto"
|
|
|
|
"github.com/prometheus/prometheus/storage/raw/leveldb"
|
|
"github.com/prometheus/prometheus/utility/test"
|
|
)
|
|
|
|
const cacheCapacity = 0
|
|
|
|
type (
|
|
// Pair models a prospective (key, value) double that will be committed
|
|
// to a database.
|
|
Pair interface {
|
|
Get() (key, value proto.Message)
|
|
}
|
|
|
|
// Pairs models a list of Pair for disk committing.
|
|
Pairs []Pair
|
|
|
|
// Preparer readies a LevelDB store for a given raw state given the
|
|
// fixtures definitions passed into it.
|
|
Preparer interface {
|
|
// Prepare furnishes the database and returns its path along
|
|
// with any encountered anomalies.
|
|
Prepare(namespace string, f FixtureFactory) test.TemporaryDirectory
|
|
}
|
|
|
|
// FixtureFactory is an iterator emitting fixture data.
|
|
FixtureFactory interface {
|
|
// HasNext indicates whether the FixtureFactory has more pending
|
|
// fixture data to build.
|
|
HasNext() (has bool)
|
|
// Next emits the next (key, value) double for storage.
|
|
Next() (key, value proto.Message)
|
|
}
|
|
|
|
preparer struct {
|
|
tester test.Tester
|
|
}
|
|
|
|
cassetteFactory struct {
|
|
index int
|
|
count int
|
|
pairs Pairs
|
|
}
|
|
)
|
|
|
|
func (p preparer) Prepare(n string, f FixtureFactory) (t test.TemporaryDirectory) {
|
|
t = test.NewTemporaryDirectory(n, p.tester)
|
|
persistence, err := leveldb.NewLevelDBPersistence(leveldb.LevelDBOptions{
|
|
Path: t.Path(),
|
|
CacheSizeBytes: cacheCapacity,
|
|
})
|
|
if err != nil {
|
|
defer t.Close()
|
|
p.tester.Fatal(err)
|
|
}
|
|
|
|
defer persistence.Close()
|
|
|
|
for f.HasNext() {
|
|
key, value := f.Next()
|
|
|
|
err = persistence.Put(key, value)
|
|
if err != nil {
|
|
defer t.Close()
|
|
p.tester.Fatal(err)
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// HasNext implements FixtureFactory.
|
|
func (f cassetteFactory) HasNext() bool {
|
|
return f.index < f.count
|
|
}
|
|
|
|
// Next implements FixtureFactory.
|
|
func (f *cassetteFactory) Next() (key, value proto.Message) {
|
|
key, value = f.pairs[f.index].Get()
|
|
|
|
f.index++
|
|
|
|
return
|
|
}
|
|
|
|
// NewPreparer creates a new Preparer for use in testing scenarios.
|
|
func NewPreparer(t test.Tester) Preparer {
|
|
return preparer{t}
|
|
}
|
|
|
|
// NewCassetteFactory builds a new FixtureFactory that uses Pairs as the basis
|
|
// for generated fixture data.
|
|
func NewCassetteFactory(pairs Pairs) FixtureFactory {
|
|
return &cassetteFactory{
|
|
pairs: pairs,
|
|
count: len(pairs),
|
|
}
|
|
}
|