package utils

import (
	"archive/tar"
	"bytes"
	"io"
	"os"
	"testing"

	"github.com/onsi/gomega"
)

func Test_ReadTar(t *testing.T) {
	g := gomega.NewWithT(t)
	f, err := os.Open("../testdata/cluster.json")
	g.Expect(err).To(gomega.Succeed())

	data, err := io.ReadAll(f)
	g.Expect(err).To(gomega.Succeed())

	var buf bytes.Buffer
	tw := tar.NewWriter(&buf)

	hdr := &tar.Header{
		Name: "cluster.json",
		Mode: 0o600,
		Size: int64(len(data)),
	}
	if err := tw.WriteHeader(hdr); err != nil {
		g.Expect(err).To(gomega.Succeed())
	}
	if _, err := tw.Write(data); err != nil {
		g.Expect(err).To(gomega.Succeed())
	}

	if err := tw.Close(); err != nil {
		t.Errorf("tar writer close failed, err: %s", err)
	}

	tr := tar.NewReader(&buf)

	err = ReadTarWithReader(tr, func(fileName string, fh *tar.Header, r io.Reader) {
		g.Expect(fileName).To(gomega.Equal("cluster.json"))
	})
	g.Expect(err).To(gomega.Succeed())
}
