github.com/Schaudge/grailbase@v0.0.0-20240223061707-44c758a471c0/fileio/names_test.go (about)

     1  // Copyright 2017 GRAIL, Inc. All rights reserved.
     2  // Use of this source code is governed by the Apache-2.0
     3  // license that can be found in the LICENSE file.
     4  
     5  package fileio_test
     6  
     7  import (
     8  	"testing"
     9  
    10  	"github.com/Schaudge/grailbase/fileio"
    11  )
    12  
    13  func TestNames(t *testing.T) {
    14  	if got, want := fileio.DetermineType("xx"), fileio.Other; got != want {
    15  		t.Errorf("got %v, want %v", got, want)
    16  	}
    17  
    18  	if got, want := fileio.DetermineType("xx.bar"), fileio.Other; got != want {
    19  		t.Errorf("got %v, want %v", got, want)
    20  	}
    21  
    22  	if got, want := fileio.DetermineType("xx.grail-rpk"), fileio.GrailRIOPacked; got != want {
    23  		t.Errorf("got %v, want %v", got, want)
    24  	}
    25  
    26  	if got, want := fileio.FileSuffix(fileio.GrailRIOPackedEncrypted), ".grail-rpk-kd"; got != want {
    27  		t.Errorf("got %v, want %v", got, want)
    28  	}
    29  
    30  	if got, want := fileio.FileSuffix(fileio.Other), ""; got != want {
    31  		t.Errorf("got %v, want %v", got, want)
    32  	}
    33  
    34  	if got, want := fileio.DetermineAPI("xx.bar"), fileio.LocalAPI; got != want {
    35  		t.Errorf("got %v, want %v", got, want)
    36  	}
    37  	if got, want := fileio.DetermineAPI("s3://"), fileio.S3API; got != want {
    38  		t.Errorf("got %v, want %v", got, want)
    39  	}
    40  }
    41  
    42  func TestS3Spelling(t *testing.T) {
    43  	for _, tc := range []struct {
    44  		input     string
    45  		api       fileio.StorageAPI
    46  		corrected bool
    47  		fixed     string
    48  	}{
    49  		{"s3://ok", fileio.S3API, false, "s3://ok"},
    50  		{"s3://ok/a", fileio.S3API, false, "s3://ok/a"},
    51  		{"s3://", fileio.S3API, false, "s3://"},
    52  		{"s3:/", fileio.S3API, true, "s3://"},
    53  		{"s3:/1", fileio.S3API, true, "s3://1"},
    54  		{"s3:///2", fileio.S3API, true, "s3://2"},
    55  		{"s3:///2/x", fileio.S3API, true, "s3://2/x"},
    56  		{"s3:4", fileio.S3API, true, "s3://4"},
    57  		{"s://5", fileio.S3API, true, "s3://5"},
    58  		{"s:/6", fileio.S3API, true, "s3://6"},
    59  		{"s33", fileio.LocalAPI, false, "s33"},
    60  	} {
    61  		api, corrected, fixed := fileio.SpellCorrectS3(tc.input)
    62  		if got, want := api, tc.api; got != want {
    63  			t.Errorf("%v: got %v, want %v", tc.input, got, want)
    64  		}
    65  		if got, want := corrected, tc.corrected; got != want {
    66  			t.Errorf("%v: got %v, want %v", tc.input, got, want)
    67  		}
    68  		if got, want := fixed, tc.fixed; got != want {
    69  			t.Errorf("%v: got %v, want %v", tc.input, got, want)
    70  		}
    71  	}
    72  }