Something went wrong. Try again.
This repository has no description
Something went wrong. Try again.
1.8 kB · 60 lines
Go
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061package vod
import ( "bytes" "context" "os" "testing" "time"
"github.com/stretchr/testify/require" "stream.place/streamplace/pkg/bdasl" "stream.place/streamplace/pkg/blob" "stream.place/streamplace/pkg/log")
// TestGenerateThumbnail runs the VOD pipeline end-to-end against a real// file-backed store, then exercises generateThumbnail: it should pull// the midpoint video segment + its init segment out of the store,// flatten the signed m4s, and render a valid JPEG.func TestGenerateThumbnail(t *testing.T) { warmGST()
ctx, cancel := context.WithCancel(context.Background()) defer cancel() ctx = log.WithLogValues(ctx, "test", "TestGenerateThumbnail")
fixture, err := os.ReadFile(getFixture("5sec.mp4")) require.NoError(t, err)
store, err := blob.NewFileStore(t.TempDir()) require.NoError(t, err)
signer, err := newUploadSigner(time.Now()) require.NoError(t, err)
out := &bytes.Buffer{} hasher := bdasl.NewWriter() dst := teeWriter{hasher, out}
mb := newMetafileBuilder(ctx, store) _, err = streamThroughMuxl(ctx, bytes.NewReader(fixture), int64(len(fixture)), dst, mb, signer.SignerInput) require.NoError(t, err)
cid := hasher.CID() meta := mb.Finalize(cid, int64(out.Len()))
// generateThumbnail reads the content blob from the store. The real // ProcessVOD writes it via the staging writer + content assembly; this // test drives streamThroughMuxl directly, so place it by hand. w, err := store.NewWriter(ctx, BlobsPrefix+cid+".mp4", "video/mp4") require.NoError(t, err) _, err = w.Write(out.Bytes()) require.NoError(t, err) require.NoError(t, w.Complete())
thumb, err := generateThumbnail(ctx, store, cid, meta) require.NoError(t, err) require.NotEmpty(t, thumb) require.True(t, bytes.HasPrefix(thumb, []byte{0xFF, 0xD8, 0xFF}), "expected JPEG SOI marker")}