diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9a2c773 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +testing \ No newline at end of file diff --git a/squashfs_test.go b/squashfs_test.go new file mode 100644 index 0000000..2696020 --- /dev/null +++ b/squashfs_test.go @@ -0,0 +1,82 @@ +package squashfs_test + +import ( + "io" + "net/http" + "os" + "testing" + + appimage "github.com/CalebQ42/GoAppImage" +) + +const ( + downloadURL = "https://github.com/zilti/code-oss.AppImage/releases/download/continuous/Code_OSS-x86_64.AppImage" + appImageName = "Code_OSS.AppImage" + squashfsName = "Code_OSS.Squashfs" +) + +func TestCreateSquashFromAppImage(t *testing.T) { + t.Parallel() + wd, err := os.Getwd() + if err != nil { + t.Fatal(err) + } + err = os.Mkdir(wd+"/testing", 0777) + if err != nil && !os.IsExist(err) { + t.Fatal(err) + } + _, err = os.Open(wd + "/testing/" + appImageName) + if os.IsNotExist(err) { + downloadTestAppImage(t, wd+"/testing") + _, err = os.Open(wd + "/testing/" + appImageName) + if err != nil { + t.Fatal(err) + } + } else if err != nil { + t.Fatal(err) + } + ai := appimage.NewAppImage(wd + "/testing/" + appImageName) + aiFil, err := os.Open(wd + "/testing/" + appImageName) + if err != nil { + t.Fatal(err) + } + defer aiFil.Close() + aiFil.Seek(ai.Offset, 0) + os.Remove(wd + "/testing/" + squashfsName) + aiSquash, err := os.Create(wd + "/testing/" + squashfsName) + if err != nil { + t.Fatal(err) + } + _, err = io.Copy(aiSquash, aiFil) + if err != nil { + t.Fatal(err) + } +} + +func downloadTestAppImage(t *testing.T, dir string) { + appImage, err := os.Create(dir + "/" + appImageName) + if err != nil { + t.Fatal(err) + } + defer appImage.Close() + check := http.Client{ + CheckRedirect: func(r *http.Request, via []*http.Request) error { + r.URL.Opaque = r.URL.Path + return nil + }, + } + resp, err := check.Get(downloadURL) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + _, err = io.Copy(appImage, resp.Body) + if err != nil { + t.Fatal(err) + } +} + +func TestLookInsideSquash(t *testing.T) { + t.Parallel() + //TODO +}