Wrap SQL time in a mock to reduce potential for flakes

Signed-off-by: Wayne Starr <me@racer159.com>
pull/11972/head
Wayne Starr 1 year 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 (
"context"
"database/sql/driver"
"fmt"
"testing"
@ -248,6 +249,15 @@ func (mock *MockSecretsInterface) Delete(_ context.Context, name string, _ metav
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)
func newTestFixtureSQL(t *testing.T, releases ...*rspb.Release) (*SQL, sqlmock.Sqlmock) {
sqlDB, mock, err := sqlmock.New()

@ -179,7 +179,7 @@ func TestSqlCreate(t *testing.T) {
mock.ExpectBegin()
mock.
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))
mock.ExpectCommit()
@ -220,7 +220,7 @@ func TestSqlCreateAlreadyExists(t *testing.T) {
mock.ExpectBegin()
mock.
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"))
selectQuery := fmt.Sprintf(
@ -278,7 +278,7 @@ func TestSqlUpdate(t *testing.T) {
mock.
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))
if err := sqlDriver.Update(key, rel); err != nil {

Loading…
Cancel
Save