// Copyright 2024 Matthew Rich . All rights reserved. package transport import ( "github.com/stretchr/testify/assert" "net/url" "testing" "fmt" "os" "log" "decl/internal/tempdir" ) var TempDir tempdir.Path = "testtransportfile" var testFileResourceDoc string = ` resources: - type: file transition: read attributes: path: /tmp/foobar ` func TestMain(m *testing.M) { err := TempDir.Create() if err != nil || TempDir == "" { log.Fatal(err) } rc := m.Run() TempDir.Remove() os.Exit(rc) } func TestNewTransportReader(t *testing.T) { path := TempDir.FilePath("foo") u, e := url.Parse(fmt.Sprintf("file://%s", path)) assert.Nil(t, e) writeErr := os.WriteFile(path, []byte("test"), 0644) assert.Nil(t, writeErr) reader, err := NewReader(u) assert.Nil(t, err) assert.NotNil(t, reader) } func TestTransportReaderContentType(t *testing.T) { path := TempDir.FilePath("foo.jx.yaml") u, e := url.Parse(fmt.Sprintf("file://%s", path)) assert.Nil(t, e) assert.False(t, Exists(u)) writeErr := os.WriteFile(path, []byte(testFileResourceDoc), 0644) assert.Nil(t, writeErr) reader, err := NewReader(u) assert.Nil(t, err) assert.True(t, reader.Exists()) assert.NotNil(t, reader) assert.Equal(t, "jx.yaml", reader.ContentType()) } func TestTransportReaderDir(t *testing.T) { u, e := url.Parse(fmt.Sprintf("file://%s", string(TempDir))) assert.Nil(t, e) reader, err := NewReader(u) assert.ErrorContains(t, err, "is a directory") assert.True(t, reader.Exists()) assert.NotNil(t, reader) } func TestTransportWriter(t *testing.T) { path := TempDir.FilePath("writefoo") u, e := url.Parse(fmt.Sprintf("file://%s", path)) assert.Nil(t, e) assert.False(t, Exists(u)) writer, err := NewWriter(u) assert.Nil(t, err) defer writer.Close() assert.NotNil(t, writer) assert.True(t, writer.Exists()) _, writeErr := writer.Write([]byte("testdata")) assert.Nil(t, writeErr) assert.FileExists(t, path) }