// Copyright (C) The Arvados Authors. All rights reserved.
//
// SPDX-License-Identifier: Apache-2.0

package mount

import (
	"testing"

	"git.arvados.org/arvados.git/sdk/go/arvados"
	"git.arvados.org/arvados.git/sdk/go/arvadosclient"
	"git.arvados.org/arvados.git/sdk/go/keepclient"
	"github.com/arvados/cgofuse/fuse"
	check "gopkg.in/check.v1"
)

// Gocheck boilerplate
func Test(t *testing.T) {
	check.TestingT(t)
}

var _ = check.Suite(&FSSuite{})

type FSSuite struct{}

func (*FSSuite) TestFuseInterface(c *check.C) {
	var _ fuse.FileSystemInterface = &keepFS{}
}

func (*FSSuite) TestOpendir(c *check.C) {
	client := arvados.NewClientFromEnv()
	ac, err := arvadosclient.New(client)
	c.Assert(err, check.IsNil)
	kc, err := keepclient.MakeKeepClient(ac)
	c.Assert(err, check.IsNil)

	var fs fuse.FileSystemInterface = &keepFS{
		Client:     client,
		KeepClient: kc,
	}
	fs.Init()
	errc, fh := fs.Opendir("/by_id")
	c.Check(errc, check.Equals, 0)
	c.Check(fh, check.Not(check.Equals), uint64(0))
	c.Check(fh, check.Not(check.Equals), invalidFH)
	errc, fh = fs.Opendir("/bogus")
	c.Check(errc, check.Equals, -fuse.ENOENT)
	c.Check(fh, check.Equals, invalidFH)
}