github.com/kubecost/golang-migrate-duckdb/v4@v4.17.0-duckdb.1/source/httpfs/partial_driver_test.go (about)

     1  package httpfs_test
     2  
     3  import (
     4  	"errors"
     5  	"net/http"
     6  	"strings"
     7  	"testing"
     8  
     9  	"github.com/golang-migrate/migrate/v4/source"
    10  	"github.com/golang-migrate/migrate/v4/source/httpfs"
    11  	st "github.com/golang-migrate/migrate/v4/source/testing"
    12  )
    13  
    14  type driver struct{ httpfs.PartialDriver }
    15  
    16  func (d *driver) Open(url string) (source.Driver, error) { return nil, errors.New("X") }
    17  
    18  type driverExample struct {
    19  	httpfs.PartialDriver
    20  }
    21  
    22  func (d *driverExample) Open(url string) (source.Driver, error) {
    23  	parts := strings.Split(url, ":")
    24  	dir := parts[0]
    25  	path := ""
    26  	if len(parts) >= 2 {
    27  		path = parts[1]
    28  	}
    29  
    30  	var de driverExample
    31  	return &de, de.Init(http.Dir(dir), path)
    32  }
    33  
    34  func TestDriverExample(t *testing.T) {
    35  	d, err := (*driverExample)(nil).Open("testdata:sql")
    36  	if err != nil {
    37  		t.Errorf("Open() returned error: %s", err)
    38  	}
    39  	st.Test(t, d)
    40  }
    41  
    42  func TestPartialDriverInit(t *testing.T) {
    43  	tests := []struct {
    44  		name string
    45  		fs   http.FileSystem
    46  		path string
    47  		ok   bool
    48  	}{
    49  		{
    50  			name: "valid dir and empty path",
    51  			fs:   http.Dir("testdata/sql"),
    52  			ok:   true,
    53  		},
    54  		{
    55  			name: "valid dir and non-empty path",
    56  			fs:   http.Dir("testdata"),
    57  			path: "sql",
    58  			ok:   true,
    59  		},
    60  		{
    61  			name: "invalid dir",
    62  			fs:   http.Dir("does-not-exist"),
    63  		},
    64  		{
    65  			name: "file instead of dir",
    66  			fs:   http.Dir("testdata/sql/1_foobar.up.sql"),
    67  		},
    68  		{
    69  			name: "dir with duplicates",
    70  			fs:   http.Dir("testdata/duplicates"),
    71  		},
    72  	}
    73  
    74  	for _, test := range tests {
    75  		t.Run(test.name, func(t *testing.T) {
    76  			var d driver
    77  			err := d.Init(test.fs, test.path)
    78  			if test.ok {
    79  				if err != nil {
    80  					t.Errorf("Init() returned error %s", err)
    81  				}
    82  				st.Test(t, &d)
    83  				if err = d.Close(); err != nil {
    84  					t.Errorf("Init().Close() returned error %s", err)
    85  				}
    86  			} else {
    87  				if err == nil {
    88  					t.Errorf("Init() expected error but did not get one")
    89  				}
    90  			}
    91  		})
    92  	}
    93  
    94  }
    95  
    96  func TestFirstWithNoMigrations(t *testing.T) {
    97  	var d driver
    98  	fs := http.Dir("testdata/no-migrations")
    99  
   100  	if err := d.Init(fs, ""); err != nil {
   101  		t.Errorf("No error on Init() expected, got: %v", err)
   102  	}
   103  
   104  	if _, err := d.First(); err == nil {
   105  		t.Errorf("Expected error on First(), got: %v", err)
   106  	}
   107  }