github.com/readium/readium-lcp-server@v0.0.0-20240101192032-6e95190e99f1/license/store_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 license 6 7 import ( 8 "bytes" 9 "database/sql" 10 "testing" 11 "time" 12 13 _ "github.com/mattn/go-sqlite3" 14 15 "github.com/readium/readium-lcp-server/config" 16 "github.com/readium/readium-lcp-server/sign" 17 ) 18 19 func TestCRUD(t *testing.T) { 20 21 config.Config.LcpServer.Database = "sqlite3://:memory:" 22 driver, cnxn := config.GetDatabase(config.Config.LcpServer.Database) 23 db, err := sql.Open(driver, cnxn) 24 if err != nil { 25 t.Fatal(err) 26 } 27 28 st, err := Open(db) 29 if err != nil { 30 t.Fatal(err) 31 } 32 33 fn := st.ListAll(10, 0) 34 licenses := make([]LicenseReport, 0) 35 for it, err := fn(); err == nil; it, err = fn() { 36 licenses = append(licenses, it) 37 } 38 if len(licenses) > 0 { 39 t.Errorf("Failed getting an empty list") 40 } 41 42 l := License{} 43 contentID := "1234-1234-1234-1234" 44 Initialize(contentID, &l) 45 46 l.User.ID = "me" 47 l.Provider = "my.org" 48 l.Rights = new(UserRights) 49 rstart := time.Now().UTC().Truncate(time.Second) 50 l.Rights.Start = &rstart 51 rend := rstart.Add(time.Hour * 100) 52 l.Rights.End = &rend 53 rprint := int32(100) 54 l.Rights.Print = &rprint 55 rcopy := int32(1000) 56 l.Rights.Copy = &rcopy 57 58 err = st.Add(l) 59 if err != nil { 60 t.Fatal(err) 61 } 62 63 l2, err := st.Get(l.ID) 64 if err != nil { 65 t.Fatal(err) 66 } 67 68 js1, err := sign.Canon(l) 69 js2, err2 := sign.Canon(l2) 70 if err != nil || err2 != nil || !bytes.Equal(js1, js2) { 71 t.Error("Difference between Add and Get") 72 } 73 74 // initializes another license with the same data 75 Initialize(contentID, &l) 76 err = st.Add(l) 77 if err != nil { 78 t.Fatal(err) 79 } 80 // and another with a different content id 81 contentID2 := "5678-5678-5678-5678" 82 Initialize(contentID2, &l) 83 err = st.Add(l) 84 if err != nil { 85 t.Fatal(err) 86 } 87 88 // list all 89 fn = st.ListAll(10, 0) 90 for it, err := fn(); err == nil; it, err = fn() { 91 licenses = append(licenses, it) 92 } 93 if len(licenses) != 3 { 94 t.Errorf("Failed getting three licenses; got %d licenses instead", len(licenses)) 95 } 96 97 // list by content id 98 licenses = make([]LicenseReport, 0) 99 fn = st.ListByContentID(contentID, 10, 0) 100 for it, err := fn(); err == nil; it, err = fn() { 101 licenses = append(licenses, it) 102 } 103 if len(licenses) != 2 { 104 t.Errorf("Failed getting two licenses by contentID") 105 } 106 107 // update rights 108 rstart = time.Now().UTC().Truncate(time.Second) 109 l.Rights.Start = &rstart 110 rend = rstart.Add(time.Hour * 100) 111 l.Rights.End = &rend 112 rprint = int32(200) 113 l.Rights.Print = &rprint 114 rcopy = int32(2000) 115 l.Rights.Copy = &rcopy 116 117 err = st.UpdateRights(l) 118 if err != nil { 119 t.Fatal(err) 120 } 121 l2, err = st.Get(l.ID) 122 if err != nil { 123 t.Fatal(err) 124 } 125 if *l2.Rights.Print != *l.Rights.Print { 126 t.Errorf("Failed getting updated print right") 127 } 128 129 // update 130 l.Provider = "him.org" 131 err = st.Update(l) 132 if err != nil { 133 t.Fatal(err) 134 } 135 136 // update the status (revoke) 137 err = st.UpdateLsdStatus(l.ID, int32(2)) 138 if err != nil { 139 t.Fatal(err) 140 } 141 142 }