firebase-tools icon indicating copy to clipboard operation
firebase-tools copied to clipboard

Storage List behaviour does not match real GS bucket.

Open emcfarlane opened this issue 3 years ago • 0 comments

[REQUIRED] Environment info

11.14.4

macOS

cloud.google.com/go/firestore v1.7.0 cloud.google.com/go/storage v1.27.0

[REQUIRED] Test case

package main

import (
	"context"
	"fmt"
	"os"

	"cloud.google.com/go/storage"
	firebase "firebase.google.com/go"
	"google.golang.org/api/iterator"
)

func init() {
	os.Setenv("FIRESTORE_EMULATOR_HOST", "localhost:8080")
	os.Setenv("FIREBASE_STORAGE_EMULATOR_HOST", "localhost:9199")
	os.Setenv("STORAGE_EMULATOR_HOST", "localhost:9199")
}

func check(err error) {
	if err != nil {
		panic(err)
	}
}

func main() {
	ctx := context.Background()
	app, err := firebase.NewApp(ctx, nil)
	check(err)

	st, err := app.Storage(ctx)
	check(err)
	bkt, err := st.DefaultBucket()
	check(err)

	w := bkt.Object("some/object.txt").NewWriter(ctx)
	check(err)
	_, err = fmt.Fprintf(w, "This object contains text.\n")
	check(err)
	check(w.Close())

	it := bkt.Objects(ctx, &storage.Query{
		Delimiter: "/",
		Prefix:    "some/",
	})
	for {
		attrs, err := it.Next()
		if err != nil {
			if err == iterator.Done {
				break
			}
			check(err)
		}
		fmt.Println(attrs.Name)
	}
}

[REQUIRED] Steps to reproduce

Run the code above with accesse to a real cloud storage bucket, and then the storage emulator.

[REQUIRED] Expected behavior

Expect output to be:

some/object.txt

[REQUIRED] Actual behavior

panic: bucket name not specified

goroutine 1 [running]:
main.check(...)
        /Users/edward/src/github.com/emcfarlane/mems/main.go:21
main.main()
        /Users/edward/src/github.com/emcfarlane/mems/main.go:33 +0x31b
exit status 2

Also "FIREBASE_STORAGE_EMULATOR_HOST" should control the firebase bucket. But it looks like it is ignored.

emcfarlane avatar Oct 15 '22 10:10 emcfarlane