manual_session_test.go 3.66 KB
Newer Older
1
2
3
package irmaclient

import (
Koen van Ingen's avatar
Koen van Ingen committed
4
5
	"fmt"
	"testing"
6

7
	"github.com/go-errors/errors"
8
	"github.com/privacybydesign/irmago"
9
10
11
12
13
)

type ManualSessionHandler struct {
	permissionHandler PermissionHandler
	pinHandler        PinHandler
Koen van Ingen's avatar
Koen van Ingen committed
14
15
	t                 *testing.T
	c                 chan *irma.SessionError
16
17
18
19
20
}

var client *Client

func TestManualSession(t *testing.T) {
21
22
	client = parseStorage(t)

23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
	request := "{\"nonce\": 0, \"message\":\"I owe you everything\",\"messageType\":\"STRING\",\"content\":[{\"label\":\"Student number (RU)\",\"attributes\":[\"irma-demo.RU.studentCard.studentID\"]}]}"

	channel := make(chan *irma.SessionError)
	manualSessionHandler := ManualSessionHandler{t: t, c: channel}

	client.NewManualSession(request, &manualSessionHandler)

	teardown(t)

	if err := <-channel; err != nil {
		t.Fatal(*err)
	}
}

func TestManualKeyShareSession(t *testing.T) {
38
39
	client = parseStorage(t)

40
41
42
43
44
45
46
47
48
49
50
51
52
53
	keyshareRequest := "{\"nonce\": 0, \"message\":\"I owe you everything\",\"messageType\":\"STRING\",\"content\":[{\"label\":\"Student number (RU)\",\"attributes\":[\"test.test.mijnirma.email\"]}]}"

	channel := make(chan *irma.SessionError)
	manualSessionHandler := ManualSessionHandler{t: t, c: channel}

	client.NewManualSession(keyshareRequest, &manualSessionHandler)

	teardown(t)

	if err := <-channel; err != nil {
		t.Fatal(*err)
	}
}

54
func (sh *ManualSessionHandler) Success(irmaAction irma.Action, result string) {
55
56
	sh.c <- nil
}
57
func (sh *ManualSessionHandler) UnsatisfiableRequest(irmaAction irma.Action, serverName string, missingAttributes irma.AttributeDisjunctionList) {
Koen van Ingen's avatar
Koen van Ingen committed
58
59
	sh.t.Fail()
}
60
61

// Done in irma bridge?
Koen van Ingen's avatar
Koen van Ingen committed
62
func (sh *ManualSessionHandler) StatusUpdate(irmaAction irma.Action, status irma.Status) {}
63
64
65
66
67
68
69
70
func (sh *ManualSessionHandler) RequestPin(remainingAttempts int, ph PinHandler) {
	ph(true, "12345")
}
func (sh *ManualSessionHandler) RequestSignaturePermission(request irma.SignatureRequest, requesterName string, ph PermissionHandler) {
	c := irma.DisclosureChoice{request.Candidates[0]}
	ph(true, &c)
}

71
// These handlers should not be called, fail test if they are called
72
func (sh *ManualSessionHandler) Cancelled(irmaAction irma.Action) {
73
	sh.Failure(irma.ActionUnknown, &irma.SessionError{Err: errors.New("Session was cancelled")})
74
}
Koen van Ingen's avatar
Koen van Ingen committed
75
func (sh *ManualSessionHandler) MissingKeyshareEnrollment(manager irma.SchemeManagerIdentifier) {
76
	sh.Failure(irma.ActionUnknown, &irma.SessionError{Err: errors.Errorf("Missing keyshare server %s", manager.String())})
Koen van Ingen's avatar
Koen van Ingen committed
77
78
}
func (sh *ManualSessionHandler) RequestIssuancePermission(request irma.IssuanceRequest, issuerName string, ph PermissionHandler) {
79
	sh.Failure(irma.ActionUnknown, &irma.SessionError{Err: errors.New("Unexpected session type")})
Koen van Ingen's avatar
Koen van Ingen committed
80
81
}
func (sh *ManualSessionHandler) RequestSchemeManagerPermission(manager *irma.SchemeManager, callback func(proceed bool)) {
82
	sh.Failure(irma.ActionUnknown, &irma.SessionError{Err: errors.New("Unexpected session type")})
Koen van Ingen's avatar
Koen van Ingen committed
83
84
}
func (sh *ManualSessionHandler) RequestVerificationPermission(request irma.DisclosureRequest, verifierName string, ph PermissionHandler) {
85
	sh.Failure(irma.ActionUnknown, &irma.SessionError{Err: errors.New("Unexpected session type")})
Koen van Ingen's avatar
Koen van Ingen committed
86
}
87
88
func (sh *ManualSessionHandler) Failure(irmaAction irma.Action, err *irma.SessionError) {
	fmt.Println(err.Err)
89
90
91
92
93
94
	select {
	case sh.c <- err:
		// nop
	default:
		sh.t.Fatal(err)
	}
95
}
96
func (sh *ManualSessionHandler) KeyshareBlocked(manager irma.SchemeManagerIdentifier, duration int) {
97
	sh.Failure(irma.ActionUnknown, &irma.SessionError{Err: errors.New("KeyshareBlocked")})
98
}
99
func (sh *ManualSessionHandler) KeyshareRegistrationIncomplete(manager irma.SchemeManagerIdentifier) {
100
	sh.Failure(irma.ActionUnknown, &irma.SessionError{Err: errors.New("KeyshareRegistrationIncomplete")})
101
}