(t *testing.T)
| 803 | } |
| 804 | |
| 805 | func TestExtractOrReadBinFS(t *testing.T) { |
| 806 | t.Parallel() |
| 807 | t.Run("DoubleExtractDoesNotModifyFiles", func(t *testing.T) { |
| 808 | t.Parallel() |
| 809 | |
| 810 | siteFS := sampleBinFS() |
| 811 | dest := t.TempDir() |
| 812 | _, _, err := site.ExtractOrReadBinFS(dest, siteFS) |
| 813 | require.NoError(t, err) |
| 814 | |
| 815 | checkModtime := func() map[string]time.Time { |
| 816 | m := make(map[string]time.Time) |
| 817 | |
| 818 | err = filepath.WalkDir(dest, func(path string, d fs.DirEntry, err error) error { |
| 819 | if err != nil { |
| 820 | return err |
| 821 | } |
| 822 | if d.IsDir() { |
| 823 | return nil // Only check the files. |
| 824 | } |
| 825 | stat, err := d.Info() |
| 826 | if err != nil { |
| 827 | return err |
| 828 | } |
| 829 | |
| 830 | m[path] = stat.ModTime() |
| 831 | return nil |
| 832 | }) |
| 833 | require.NoError(t, err) |
| 834 | |
| 835 | return m |
| 836 | } |
| 837 | |
| 838 | firstModtimes := checkModtime() |
| 839 | |
| 840 | _, _, err = site.ExtractOrReadBinFS(dest, siteFS) |
| 841 | require.NoError(t, err) |
| 842 | |
| 843 | secondModtimes := checkModtime() |
| 844 | |
| 845 | assert.Equal(t, firstModtimes, secondModtimes, "second extract should not modify files") |
| 846 | }) |
| 847 | t.Run("SHA256MismatchCausesReExtract", func(t *testing.T) { |
| 848 | t.Parallel() |
| 849 | |
| 850 | siteFS := sampleBinFS() |
| 851 | dest := t.TempDir() |
| 852 | _, _, err := site.ExtractOrReadBinFS(dest, siteFS) |
| 853 | require.NoError(t, err) |
| 854 | |
| 855 | bin := filepath.Join(dest, "bin", "coder-linux-amd64") |
| 856 | f, err := os.OpenFile(bin, os.O_WRONLY, 0o600) |
| 857 | require.NoError(t, err) |
| 858 | |
| 859 | dontWant := []byte("hello") |
| 860 | _, err = f.WriteAt(dontWant, 0) // Overwrite the start of file. |
| 861 | assert.NoError(t, err) // Assert to allow f.Close. |
| 862 |
nothing calls this directly
no test coverage detected