@@ -6,86 +6,134 @@ let _test = require('tape-promise');
6
6
let test = _test ( tape ) ;
7
7
const path = require ( 'path' ) ;
8
8
let FabricCAServices = require ( '../../fabric-ca-client' ) ;
9
+ const HFCAIdentityAttributes = require ( '../../fabric-ca-client/lib/IdentityService' ) . HFCAIdentityAttributes ;
9
10
const User = require ( '../../fabric-ca-client/lib/User' ) ;
10
11
11
- let userOrg = 'org1' ;
12
+ let userOrg1 = 'org1' ;
13
+ let userOrg2 = 'org2' ;
12
14
let tlsOptions = {
13
15
trustedRoots : [ ] ,
14
16
verify : false
15
17
} ;
16
18
17
19
let ORGS ;
18
20
19
- test ( '\n\n ** FabricCAServices - IdentityService Test **\n\n' , ( t ) => {
21
+ test ( '\n\n ** FabricCAServices - IdentityService Test **\n\n' , async ( t ) => {
20
22
21
23
FabricCAServices . addConfigFile ( path . join ( __dirname , 'e2e' , 'config.json' ) ) ;
22
24
ORGS = FabricCAServices . getConfigSetting ( 'test-network' ) ;
23
25
24
- let fabricCAEndpoint = ORGS [ userOrg ] . ca . url ;
26
+ const fabricCAEndpoint1 = ORGS [ userOrg1 ] . ca . url ;
27
+ const fabricCAEndpoint2 = ORGS [ userOrg2 ] . ca . url ;
25
28
26
29
FabricCAServices . getConfigSetting ( 'crypto-keysize' , '256' ) ; //force for gulp test
27
30
FabricCAServices . setConfigSetting ( 'crypto-hash-algo' , 'SHA2' ) ; //force for gulp test
28
31
29
- let caService = new FabricCAServices ( fabricCAEndpoint , tlsOptions , ORGS [ userOrg ] . ca . name ) ;
32
+ let caService1 = new FabricCAServices ( fabricCAEndpoint1 , tlsOptions , ORGS [ userOrg1 ] . ca . name ) ;
33
+ let caService2 = new FabricCAServices ( fabricCAEndpoint2 , tlsOptions , ORGS [ userOrg2 ] . ca . name ) ;
30
34
31
35
let bootstrapUser = {
32
36
enrollmentID : 'admin' ,
33
37
enrollmentSecret : 'adminpw'
34
38
} ;
35
39
36
- let admin ;
40
+ let admin1 ;
41
+ let admin2 ;
37
42
let testIdentity = {
38
- enrollmentID : 'user_' + Math . random ( ) . toFixed ( 2 ) . toString ( ) ,
43
+ enrollmentID : 'user_' + Math . random ( ) . toFixed ( 3 ) . toString ( ) ,
39
44
enrollmentSecret : 'userpw' ,
40
- affiliation : 'org1'
45
+ affiliation : 'org1' ,
46
+ // set this identity can manage identities of the role client
47
+ attrs : [ { name : HFCAIdentityAttributes . HFREGISTRARROLES , value : 'client' } ]
41
48
} ;
49
+
50
+ // update the enrollment secret for testIdentity
42
51
let update = {
43
- affiliation : 'org2' ,
44
52
enrollmentSecret : 'mysecret'
45
53
} ;
46
- let hfcaIdentityService ;
47
-
48
- caService . enroll ( bootstrapUser )
49
- . then ( ( enrollment ) => {
50
- t . pass ( 'Successfully enrolled \'' + bootstrapUser . enrollmentID + '\'.' ) ;
51
- admin = new User ( 'admin' ) ;
52
- return admin . setEnrollment ( enrollment . key , enrollment . certificate , 'Org1MSP' ) ;
53
- } ) . then ( ( ) => {
54
- t . pass ( 'Successfully set enrollment for user admin' ) ;
55
- hfcaIdentityService = caService . newIdentityService ( ) ;
56
-
57
- // create a new Identity with admin
58
- return hfcaIdentityService . create ( testIdentity , admin ) ;
59
- } ) . then ( ( resp ) => {
60
- t . equal ( resp , testIdentity . enrollmentSecret ) ;
61
- t . pass ( 'Successfully created new Identity ' + testIdentity . enrollmentID ) ;
62
-
63
- // get this Identity
64
- return hfcaIdentityService . getOne ( testIdentity . enrollmentID , admin ) ;
65
- } ) . then ( ( resp ) => {
66
- t . pass ( 'Successfully get indentity ' + testIdentity . enrollmentID ) ;
67
- t . equal ( resp . success , true ) ;
68
- t . equal ( resp . result . id , testIdentity . enrollmentID ) ;
69
- t . equal ( resp . result . affiliation , testIdentity . affiliation ) ;
70
-
71
- return hfcaIdentityService . update ( testIdentity . enrollmentID , update , admin ) ;
72
- } ) . then ( ( resp ) => {
73
- t . equal ( resp . result . secret , update . enrollmentSecret ) ;
74
- t . equal ( resp . result . affiliation , update . affiliation ) ;
75
- t . pass ( 'Successfully updated indentity ' + testIdentity . enrollmentID ) ;
76
-
77
- return hfcaIdentityService . getAll ( admin ) ;
78
- } ) . then ( ( resp ) => {
79
- t . equal ( resp . success , true ) ;
80
- // should be two identities, 'admin' and the new created user
81
- t . equal ( resp . result . identities . length , 2 ) ;
82
-
83
- return hfcaIdentityService . delete ( testIdentity . enrollmentID , admin ) ;
84
- } ) . then ( ( resp ) => {
85
- t . pass ( 'Successfully deleted identity ' + testIdentity . enrollmentID ) ;
86
- t . end ( ) ;
87
- } ) . catch ( ( e ) => {
88
- t . fail ( e . message ) ;
54
+ let hfcaIdentityService1 ;
55
+ let hfcaIdentityService2 ;
56
+
57
+ try {
58
+ const enrollment1 = await caService1 . enroll ( bootstrapUser ) ;
59
+ t . pass ( 'Successfully enrolled admin at ca_Org1' ) ;
60
+
61
+ const enrollment2 = await caService2 . enroll ( bootstrapUser ) ;
62
+ t . pass ( 'Successfully enrolled admin at ca_Org2' ) ;
63
+
64
+ admin1 = new User ( 'admin' ) ;
65
+ await admin1 . setEnrollment ( enrollment1 . key , enrollment1 . certificate , 'Org1MSP' ) ;
66
+ t . pass ( 'Successfully set enrollment for user admin1' ) ;
67
+
68
+ admin2 = new User ( 'admin2' ) ;
69
+ await admin2 . setEnrollment ( enrollment2 . key , enrollment2 . certificate , 'Org2MSP' ) ;
70
+ t . pass ( 'Successfully set enrollment for user admin2' ) ;
71
+
72
+ hfcaIdentityService1 = caService1 . newIdentityService ( ) ;
73
+ hfcaIdentityService2 = caService2 . newIdentityService ( ) ;
74
+
75
+ // create a new Identity with admin1
76
+ let resp = await hfcaIdentityService1 . create ( testIdentity , admin1 ) ;
77
+ t . equal ( resp , testIdentity . enrollmentSecret ) ;
78
+ t . pass ( 'Successfully created new Identity %s by admin1' , testIdentity . enrollmentID ) ;
79
+
80
+ let enrollment ;
81
+ let identity ;
82
+ // enroll the new created user at ca_Org1
83
+ enrollment = await caService1 . enroll ( { enrollmentID : testIdentity . enrollmentID , enrollmentSecret : testIdentity . enrollmentSecret } ) ;
84
+ t . pass ( `Successfully enrolled ${ testIdentity . enrollmentID } at ca_Org1` ) ;
85
+ identity = new User ( testIdentity . enrollmentID ) ;
86
+ await identity . setEnrollment ( enrollment . key , enrollment . certificate , 'Org1MSP' ) ;
87
+
88
+ // should throw error if we enroll this new identity at ca_Org2
89
+ try {
90
+ enrollment = await caService2 . enroll ( { enrollmentID : testIdentity . enrollmentID , enrollmentSecret : testIdentity . enrollmentSecret } ) ;
91
+ t . fail ( 'should throw error if we enroll this new identity at ca_Org2' ) ;
89
92
t . end ( ) ;
90
- } ) ;
93
+ } catch ( e ) {
94
+ t . equal ( e . message . indexOf ( '"message":"Authorization failure"' ) >= 0 , true ) ;
95
+ t . pass ( 'should throw error if we enroll this new identity at ca_Org2' ) ;
96
+ }
97
+
98
+ // get this Identity from ca_Org1 by identity
99
+ resp = await hfcaIdentityService1 . getOne ( testIdentity . enrollmentID , identity ) ;
100
+ t . pass ( `Successfully get indentity ${ testIdentity . enrollmentID } ` ) ;
101
+ t . equal ( resp . success , true ) ;
102
+ t . equal ( resp . result . id , testIdentity . enrollmentID ) ;
103
+ t . equal ( resp . result . affiliation , testIdentity . affiliation ) ;
104
+
105
+ // get this Identity from ca_Org1 by admin1
106
+ resp = await hfcaIdentityService1 . getOne ( testIdentity . enrollmentID , admin1 ) ;
107
+ t . equal ( resp . success , true ) ;
108
+
109
+ // identity can only find itself
110
+ resp = await hfcaIdentityService1 . getAll ( identity ) ;
111
+ t . equal ( resp . success , true ) ;
112
+ t . equal ( resp . result . identities . length , 1 ) ;
113
+
114
+ // admin of ca1 can find two identities
115
+ resp = await hfcaIdentityService1 . getAll ( admin1 ) ;
116
+ t . equal ( resp . success , true ) ;
117
+ t . equal ( resp . result . identities . length , 2 ) ;
118
+
119
+ // admin of ca2 can only find 1 identity
120
+ resp = await hfcaIdentityService2 . getAll ( admin2 ) ;
121
+ t . equal ( resp . success , true ) ;
122
+ t . equal ( resp . result . identities . length , 1 ) ;
123
+
124
+ // update test identity with admin1
125
+ resp = await hfcaIdentityService1 . update ( identity . _name , update , admin1 ) ;
126
+ t . equal ( resp . result . secret , update . enrollmentSecret ) ;
127
+ t . pass ( 'Successfully updated indentity ' + identity . _name ) ;
128
+
129
+ // identity delete itself
130
+ resp = await hfcaIdentityService1 . delete ( identity . _name , identity , true ) ;
131
+ t . equal ( resp . success , true ) ;
132
+ t . equal ( resp . result . id , identity . _name ) ;
133
+ t . pass ( 'Successfully deleted identity ' + identity . _name ) ;
134
+ t . end ( ) ;
135
+ } catch ( e ) {
136
+ t . fail ( e ) ;
137
+ t . end ( ) ;
138
+ }
91
139
} ) ;
0 commit comments