fix balance check in server logic
[epoint] / pkg / document / document_test.go
index 982f3a9..4a3c832 100644 (file)
@@ -1,6 +1,9 @@
 package document
 
 import (
+       "bytes"
+       "crypto/openpgp"
+       "fmt"
        "testing"
 )
 
@@ -227,3 +230,139 @@ func TestCert(t *testing.T) {
                t.Errorf("parsed %#v\nexpected: %s\ngot: %s\n", d, debitBody, s)
        }
 }
+
+func parsekey(key []byte) (*openpgp.Entity, error) {
+       elist, err := openpgp.ReadArmoredKeyRing(bytes.NewBuffer(key))
+       if err != nil {
+               return nil, err
+       }
+       if len(elist) != 1 {
+               return nil, fmt.Errorf("expected one key, got %d", len(elist))
+       }
+       return elist[0], nil
+}
+
+func TestSign(t *testing.T) {
+       k1, err := parsekey(skey1)
+       if err != nil {
+               t.Errorf("parsing key1 failed: %s", err)
+               return
+       }
+       k2, err := parsekey(pkey2)
+       if err != nil {
+               t.Errorf("parsing key2 failed: %s", err)
+               return
+       }
+       signed, err := Sign([]byte(debitBody), k1)
+       if err != nil {
+               t.Errorf("Sign failed: %s", err)
+               return
+       }
+       err = Verify(signed, openpgp.EntityList{k1})
+       if err != nil {
+               t.Errorf("Verify failed: %s", err)
+       }
+       err = Verify(signed, openpgp.EntityList{k2})
+       if err == nil {
+               t.Errorf("Verify succeeded with wrong key")
+       }
+}
+
+func debitcert() (d *DebitCert, err error) {
+       doc, err := ParseDocument([]byte(debitBody))
+       if err != nil {
+               return
+       }
+       iv, err := ParseStruct(doc)
+       if err != nil {
+               return
+       }
+       d, ok := iv.(*DebitCert)
+       if !ok {
+               err = fmt.Errorf("expecetd *DebitCert, got %T", d)
+       }
+       return
+}
+
+func BenchmarkSign(b *testing.B) {
+       d, err := debitcert()
+       if err != nil {
+               panic(err)
+       }
+       b.ResetTimer()
+       for i := 0; i < b.N; i++ {
+               k, err := parsekey(skey1)
+               if err != nil {
+                       panic(err)
+               }
+               _, _, err = Format(d, k)
+               if err != nil {
+                       panic(err)
+               }
+       }
+}
+
+func BenchmarkVerify(b *testing.B) {
+       d, err := debitcert()
+       if err != nil {
+               panic(err)
+       }
+       k, err := parsekey(skey1)
+       if err != nil {
+               panic(err)
+       }
+       s, _, err := Format(d, k)
+       if err != nil {
+               panic(err)
+       }
+       b.ResetTimer()
+       for i := 0; i < b.N; i++ {
+               k, err := parsekey(skey1)
+               if err != nil {
+                       panic(err)
+               }
+               _, signed, err := Parse(s)
+               if err != nil {
+                       panic(err)
+               }
+               err = Verify(signed, openpgp.EntityList{k})
+               if err != nil {
+                       panic(err)
+               }
+       }
+}
+
+var skey1 = []byte(`-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+xcD7BAAAAAARBACk0rlXXCXw5iK4aUOHEop5PhrSfRL/9LW6EaN879Mck1vLsKlE
+WBpubaEphvy6nWZmB9cdNlwoa5vLV/bZOL50mCt9dwzkOPA7CiCroC5WkUWMOdlu
+boauVkF27Rpt+6+27nZ0zF7c+f62FYRx+z+rU7oc4bpkxWJrnoWF/O9dMQCg////
+/////////yVOr555FtYHqq8D/36lyJh3e+S7KdzcRyiecY9ydMnNflcNPVUvOz7k
+PD3ve6aOV3hpJlIMyscduhPzfEBkOV1a8zNKBKvYztXn/0dsZhlTk26K3elqOdjE
+rBCAor4/6GOiSwi9Q4J+VK+tpyQzcE6jwS5Q5b0IwTDGihQC/CDaec/g3pMcQUNI
+0ysQBACIdEX3XRinq+oFm3+YFu5bC1Ewry7eVxukto18dtMJnU69oMjF3x7Uio5A
+kvYNWYPxdtLjEzk/HMo/3Mg6u/jK006CPqZRcx/m3B5R7gYb5D9PyF/tJsrht4nD
+eDuCAT00kHKYMElgwSzXg03cFcC5AEMf6U7MsrX1JLwY5Dq12gAAoOX6RPKzHB+1
+U7YCHnNg0H1dkf9eCuzNBklzc3VlcsJMBBMRCAAWBQIAAAAACRCRl3ps/DHg6wIZ
+AQIbAwAAIroAoBn5gA6TmLKXU9ASu+ENhV0UxowzAKA9Y/4CiQzAeCDcKIcWCg7W
+3r6Jow==
+=NVdT
+-----END PGP PRIVATE KEY BLOCK-----
+`)
+
+var pkey2 = []byte(`-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+xsDiBAAAAAARBACk0rlXXCXw5iK4aUOHEop5PhrSfRL/9LW6EaN879Mck1vLsKlE
+WBpubaEphvy6nWZmB9cdNlwoa5vLV/bZOL50mCt9dwzkOPA7CiCroC5WkUWMOdlu
+boauVkF27Rpt+6+27nZ0zF7c+f62FYRx+z+rU7oc4bpkxWJrnoWF/O9dMQCg////
+/////////yVOr555FtYHqq8D/36lyJh3e+S7KdzcRyiecY9ydMnNflcNPVUvOz7k
+PD3ve6aOV3hpJlIMyscduhPzfEBkOV1a8zNKBKvYztXn/0dsZhlTk26K3elqOdjE
+rBCAor4/6GOiSwi9Q4J+VK+tpyQzcE6jwS5Q5b0IwTDGihQC/CDaec/g3pMcQUNI
+0ysQBACFl7Go0A5UqlnmwRmsLfvAEBM2+tsIoBlBDEwcgd+nJZzCQpAqO/OpSqHk
+Yx4imGcdknfPLkMmN+Kz9j4o0T+LZuYyblhuj2t1M9lf0Is/Go0Drf/7oc2KpHAo
+nfKu7fkM5nfZWFsgE9TxOz8SQa2RuuhpbkpB2k0Vg2TbqTpFeM0GSXNzdWVywkwE
+ExEIABYFAgAAAAAJEKqJF6U/VQ52AhkBAhsDAADIMwCgt/kmhRwmlzcnc1S3Qlfo
+BD0PBa8AoG5Vm9U4gzWQM/BzVxDToJPB1ZHf
+=MNqN
+-----END PGP PUBLIC KEY BLOCK-----
+`)