blob: cae1fdde6cab028ddb1db1a24fcd21b3127cfb0d [file] [log] [blame]
package boltutil
import (
"io/ioutil"
"path/filepath"
"testing"
"github.com/boltdb/bolt"
assert "github.com/stretchr/testify/require"
"go.skia.org/infra/go/metrics2"
"go.skia.org/infra/go/testutils"
"go.skia.org/infra/go/util"
)
func TestDbMetric(t *testing.T) {
testutils.MediumTest(t)
tmpdir, err := ioutil.TempDir("", "TestDbMetric")
assert.NoError(t, err)
defer util.RemoveAll(tmpdir)
boltdb, err := bolt.Open(filepath.Join(tmpdir, "bolt.db"), 0600, nil)
assert.NoError(t, err)
defer testutils.AssertCloses(t, boltdb)
assert.NoError(t, boltdb.Update(func(tx *bolt.Tx) error {
if bucketA, err := tx.CreateBucketIfNotExists([]byte("A")); err != nil {
return err
} else {
if err := bucketA.Put([]byte("Akey1"), []byte("Avalue1")); err != nil {
return err
}
if err := bucketA.Put([]byte("Akey2"), []byte("Avalue2")); err != nil {
return err
}
}
if bucketB, err := tx.CreateBucketIfNotExists([]byte("B")); err != nil {
return err
} else {
if err := bucketB.Put([]byte("Bkey1"), []byte("Bvalue1")); err != nil {
return err
}
}
return nil
}))
database := "TestDbMetricDEF"
client := metrics2.GetDefaultClient()
m, err := NewDbMetricWithClient(client, boltdb, []string{"A", "B"}, map[string]string{"database": database})
assert.NoError(t, err)
assert.NoError(t, m.Update())
assert.NotZero(t, client.GetInt64Metric("bolt_tx", map[string]string{"metric": "WriteCount", "database": database}).Get())
assert.NotZero(t, client.GetInt64Metric("bolt_tx", map[string]string{"metric": "WriteNs", "database": database}).Get())
assert.Equal(t, int64(2), client.GetInt64Metric("bolt_bucket", map[string]string{"metric": "KeyCount", "database": database, "bucket_path": "A"}).Get())
assert.Equal(t, int64(1), client.GetInt64Metric("bolt_bucket", map[string]string{"metric": "KeyCount", "database": database, "bucket_path": "B"}).Get())
assert.NoError(t, m.Delete())
}