github.com/readium/readium-lcp-server@v0.0.0-20240101192032-6e95190e99f1/pack/rwppackage_test.go (about) 1 // Copyright 2020 Readium Foundation. All rights reserved. 2 // Use of this source code is governed by a BSD-style license 3 // that can be found in the LICENSE file exposed on Github (readium) in the project repository. 4 5 package pack 6 7 import ( 8 "bytes" 9 "testing" 10 "time" 11 12 "github.com/readium/readium-lcp-server/crypto" 13 "github.com/readium/readium-lcp-server/rwpm" 14 ) 15 16 func TestOpenRPFPackage(t *testing.T) { 17 if _, err := OpenRPF("path-does-not-exist.webpub"); err == nil { 18 t.Errorf("Expected to receive an error on missing file, got %s", err) 19 } 20 21 reader, err := OpenRPF("./samples/basic.webpub") 22 if err != nil { 23 t.Fatalf("Expected to be able to open basic.webpub, got %s", err) 24 } 25 defer reader.Close() 26 27 resources := reader.Resources() 28 if l := len(resources); l != 1 { 29 t.Errorf("Expected to get %d resources, got %d", 1, l) 30 } 31 32 if path := resources[0].Path(); path != "rwpm.pdf" { 33 t.Errorf("Expected resource to be named rwpm.pdf, got %s", path) 34 } 35 } 36 37 func TestEncryptRPF(t *testing.T) { 38 // define an AES encrypter 39 encrypter := crypto.NewAESEncrypter_PUBLICATION_RESOURCES() 40 41 // create a reader on the un-encrypted readium package 42 reader, err := OpenRPF("./samples/basic.webpub") 43 if err != nil { 44 t.Fatalf("Expected to be able to open basic.webpub, got %s", err) 45 } 46 defer reader.Close() 47 48 // create the encrypted package file 49 /* 50 outputFile, err := os.Create(outputPath) 51 if err != nil { 52 return err 53 } 54 defer outputFile.Close() 55 */ 56 var b bytes.Buffer 57 // create a writer on the encrypted package 58 writer, err := reader.NewWriter(&b) 59 if err != nil { 60 t.Fatalf("Could not build a writer, %s", err) 61 } 62 // encrypt resources from the input package, return the encryption key 63 _, err = Process(encrypter, "", reader, writer) 64 if err != nil { 65 t.Fatalf("Could not encrypt the publication, %s", err) 66 } 67 68 err = writer.Close() 69 if err != nil { 70 t.Fatalf("Could not close the writer, %s", err) 71 } 72 } 73 74 func TestWriteRPFackage(t *testing.T) { 75 reader, err := OpenRPF("./samples/basic.webpub") 76 if err != nil { 77 t.Fatalf("Expected to be able to open basic.lcpdf, got %s", err) 78 } 79 80 var b bytes.Buffer 81 writer, err := reader.NewWriter(&b) 82 if err != nil { 83 t.Fatalf("Could not build a writer, %s", err) 84 } 85 86 file, err := writer.NewFile("test.txt", "text/plain", Deflate) 87 if err != nil { 88 t.Fatalf("Could not create a new file, %s", err) 89 } 90 91 file.Write([]byte("test content")) 92 93 err = file.Close() 94 if err != nil { 95 t.Fatalf("Could not close file, %s", err) 96 } 97 98 writer.MarkAsEncrypted("test.txt", 12, "http://www.w3.org/2001/04/xmlenc#aes256-cbc") 99 100 err = writer.Close() 101 if err != nil { 102 t.Fatalf("Could not close packageWriter, %s", err) 103 } 104 105 } 106 107 func TestSetMetadata(t *testing.T) { 108 var manifest rwpm.Publication 109 110 manifest.Metadata.Identifier = "id1" 111 manifest.Metadata.Title.Set("fr", "title") 112 manifest.Metadata.Description = "description" 113 published := rwpm.Date(time.Date(2020, 03, 05, 10, 00, 00, 0, time.UTC)) 114 manifest.Metadata.Published = &published 115 manifest.Metadata.Duration = 120 116 manifest.Metadata.Author.AddName("Laurent") 117 manifest.Metadata.Language.Add("fr") 118 manifest.Metadata.ReadingProgression = "ltr" 119 manifest.Metadata.Subject.Add(rwpm.Subject{Name: "software", Scheme: "iptc", Code: "04003000"}) 120 121 }