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  }