Wrap SQL time in a mock to reduce potential for flakes

Signed-off-by: Wayne Starr <me@racer159.com>
pull/11972/head
Wayne Starr 3 years ago
parent eea2f27bab
commit 4ebf21aae2
No known key found for this signature in database
GPG Key ID: 110BA11EAAD2E1D4

@ -18,6 +18,7 @@ package driver // import "helm.sh/helm/v3/pkg/storage/driver"
import ( import (
"context" "context"
"database/sql/driver"
"fmt" "fmt"
"testing" "testing"
@ -248,6 +249,15 @@ func (mock *MockSecretsInterface) Delete(_ context.Context, name string, _ metav
return nil return nil
} }
// MockSQLFuzzyTime is an int wrapper that represents a unix timestamp int and matches both the int provided and int+1 to reduce test flakes
type MockSQLFuzzyTime int64
// Match satisfies sqlmock.Argument interface for MockSQLFuzzyTime
func (msft MockSQLFuzzyTime) Match(v driver.Value) bool {
val, ok := v.(int64)
return ok && (MockSQLFuzzyTime(val) == msft || MockSQLFuzzyTime(val) == msft+1)
}
// newTestFixtureSQL mocks the SQL database (for testing purposes) // newTestFixtureSQL mocks the SQL database (for testing purposes)
func newTestFixtureSQL(t *testing.T, releases ...*rspb.Release) (*SQL, sqlmock.Sqlmock) { func newTestFixtureSQL(t *testing.T, releases ...*rspb.Release) (*SQL, sqlmock.Sqlmock) {
sqlDB, mock, err := sqlmock.New() sqlDB, mock, err := sqlmock.New()

@ -179,7 +179,7 @@ func TestSqlCreate(t *testing.T) {
mock.ExpectBegin() mock.ExpectBegin()
mock. mock.
ExpectExec(regexp.QuoteMeta(query)). ExpectExec(regexp.QuoteMeta(query)).
WithArgs(key, sqlReleaseDefaultType, body, rel.Name, rel.Namespace, int(rel.Version), rel.Info.Status.String(), sqlReleaseDefaultOwner, int(time.Now().Unix())). WithArgs(key, sqlReleaseDefaultType, body, rel.Name, rel.Namespace, int(rel.Version), rel.Info.Status.String(), sqlReleaseDefaultOwner, MockSQLFuzzyTime(time.Now().Unix())).
WillReturnResult(sqlmock.NewResult(1, 1)) WillReturnResult(sqlmock.NewResult(1, 1))
mock.ExpectCommit() mock.ExpectCommit()
@ -220,7 +220,7 @@ func TestSqlCreateAlreadyExists(t *testing.T) {
mock.ExpectBegin() mock.ExpectBegin()
mock. mock.
ExpectExec(regexp.QuoteMeta(insertQuery)). ExpectExec(regexp.QuoteMeta(insertQuery)).
WithArgs(key, sqlReleaseDefaultType, body, rel.Name, rel.Namespace, int(rel.Version), rel.Info.Status.String(), sqlReleaseDefaultOwner, int(time.Now().Unix())). WithArgs(key, sqlReleaseDefaultType, body, rel.Name, rel.Namespace, int(rel.Version), rel.Info.Status.String(), sqlReleaseDefaultOwner, MockSQLFuzzyTime(time.Now().Unix())).
WillReturnError(fmt.Errorf("dialect dependent SQL error")) WillReturnError(fmt.Errorf("dialect dependent SQL error"))
selectQuery := fmt.Sprintf( selectQuery := fmt.Sprintf(
@ -278,7 +278,7 @@ func TestSqlUpdate(t *testing.T) {
mock. mock.
ExpectExec(regexp.QuoteMeta(query)). ExpectExec(regexp.QuoteMeta(query)).
WithArgs(body, rel.Name, int(rel.Version), rel.Info.Status.String(), sqlReleaseDefaultOwner, int(time.Now().Unix()), key, namespace). WithArgs(body, rel.Name, int(rel.Version), rel.Info.Status.String(), sqlReleaseDefaultOwner, MockSQLFuzzyTime(time.Now().Unix()), key, namespace).
WillReturnResult(sqlmock.NewResult(0, 1)) WillReturnResult(sqlmock.NewResult(0, 1))
if err := sqlDriver.Update(key, rel); err != nil { if err := sqlDriver.Update(key, rel); err != nil {

Loading…
Cancel
Save