...

Source file src/github.com/sigstore/rekor/pkg/indexstorage/mysql/mysql_test.go

Documentation: github.com/sigstore/rekor/pkg/indexstorage/mysql

     1  // Copyright 2023 The Sigstore Authors.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package mysql
    16  
    17  import (
    18  	"context"
    19  	"errors"
    20  	"regexp"
    21  	"testing"
    22  
    23  	"github.com/DATA-DOG/go-sqlmock"
    24  	"github.com/jmoiron/sqlx"
    25  
    26  	"go.uber.org/goleak"
    27  )
    28  
    29  func TestLookupIndices(t *testing.T) {
    30  	keys := []string{"87c1b129fbadd7b6e9abc0a9ef7695436d767aece042bec198a97e949fcbe14c"}
    31  	value := []string{"1e1f2c881ae0608ec77ebf88a75c66d3099113a7343238f2f7a0ebb91a4ed335"}
    32  	db, mock, err := sqlmock.New()
    33  	if err != nil {
    34  		t.Fatalf("unexpected error creating mock db: %v", err)
    35  	}
    36  
    37  	isp := IndexStorageProvider{sqlx.NewDb(db, "mysql")}
    38  	defer isp.Shutdown()
    39  
    40  	mock.ExpectQuery(lookupStmt).WithArgs(keys[0]).WillReturnRows(sqlmock.NewRows(value))
    41  
    42  	_, err = isp.LookupIndices(context.Background(), keys)
    43  	if err != nil {
    44  		t.Error(err)
    45  	}
    46  
    47  	if err := mock.ExpectationsWereMet(); err != nil {
    48  		t.Error(err)
    49  	}
    50  
    51  	expectedErr := errors.New("badness")
    52  	mock.ExpectQuery(lookupStmt).WillReturnError(expectedErr)
    53  	if _, err := isp.LookupIndices(context.Background(), keys); err == nil {
    54  		t.Error("unexpected success")
    55  	}
    56  	if err := mock.ExpectationsWereMet(); err != nil {
    57  		t.Error(err)
    58  	}
    59  }
    60  
    61  func TestWriteIndex(t *testing.T) {
    62  	keys := []string{"87c1b129fbadd7b6e9abc0a9ef7695436d767aece042bec198a97e949fcbe14c"}
    63  	value := "1e1f2c881ae0608ec77ebf88a75c66d3099113a7343238f2f7a0ebb91a4ed335"
    64  	db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
    65  	if err != nil {
    66  		t.Fatalf("unexpected error creating mock db: %v", err)
    67  	}
    68  
    69  	re := regexp.MustCompile(`:[a-z]*`)
    70  	expectedStmt := string(re.ReplaceAll([]byte(writeStmt), []byte("?")))
    71  
    72  	isp := IndexStorageProvider{sqlx.NewDb(db, "mysql")}
    73  	defer isp.Shutdown()
    74  	if err := mock.ExpectationsWereMet(); err != nil {
    75  		t.Fatalf("expectations not met: %v", err)
    76  	}
    77  
    78  	mock.ExpectExec(expectedStmt).WithArgs(keys[0], value).WillReturnResult(sqlmock.NewResult(1, 1))
    79  	if err := isp.WriteIndex(context.Background(), keys, value); err != nil {
    80  		t.Errorf("%v, %v", expectedStmt, err)
    81  	}
    82  
    83  	if err := mock.ExpectationsWereMet(); err != nil {
    84  		t.Error(err)
    85  	}
    86  
    87  	expectedErr := errors.New("badness")
    88  	mock.ExpectExec(expectedStmt).WillReturnError(expectedErr)
    89  	if err := isp.WriteIndex(context.Background(), keys, value); err == nil {
    90  		t.Error("unexpected success")
    91  	}
    92  	if err := mock.ExpectationsWereMet(); err != nil {
    93  		t.Error(err)
    94  	}
    95  }
    96  
    97  func TestUninitializedClient(t *testing.T) {
    98  	// this is not initialized with a real mysql client
    99  	isp := IndexStorageProvider{}
   100  	if _, err := isp.LookupIndices(context.Background(), []string{"key"}); err == nil {
   101  		t.Error("unexpected success")
   102  	}
   103  	if err := isp.WriteIndex(context.Background(), []string{"key"}, "value"); err == nil {
   104  		t.Error("unexpected success")
   105  	}
   106  }
   107  
   108  func TestMain(m *testing.M) {
   109  	goleak.VerifyTestMain(m)
   110  }
   111  

View as plain text