11import java .util .HashSet ;
2+ import java .util .Iterator ;
23import java .util .concurrent .CountDownLatch ;
34
45import com .google .protobuf .Struct ;
78import com .authzed .api .v1 .*;
89
910import io .grpc .stub .StreamObserver ;
11+ import jdk .dynalink .linker .support .Lookup ;
1012import org .junit .Test ;
1113
14+ import javax .security .auth .Subject ;
15+
1216import static org .assertj .core .api .Assertions .assertThat ;
1317
18+ /*
19+ NOTE: this file has some un-ergonomic code because we test against Java 8
20+ and therefore need to conform to Java 8 syntax. When we get to where we can
21+ drop support, we can update this code.
22+ */
1423public class V1ClientTest {
1524 private static final Consistency fullyConsistent = Consistency .newBuilder ().setFullyConsistent (true ).build ();
1625
1726 @ Test
1827 public void testBasicSchema () {
1928 // Initialize services
20- var client = new TestClient ();
21- String schema = """
22- definition document {
23- relation reader: user
24- }
25- definition user {}
26- """ ;
29+ TestClient client = new TestClient ();
30+ String schema = "definition document {\n "
31+ + "relation reader: user\n "
32+ + "}\n "
33+ + "definition user {}" ;
2734 // Write schema
2835 writeSchema (client , schema );
2936
3037 // Read schema
31- var readRequest = ReadSchemaRequest .newBuilder ().build ();
32- var readResponse = client .schemaService .readSchema (readRequest );
38+ ReadSchemaRequest readRequest = ReadSchemaRequest .newBuilder ().build ();
39+ ReadSchemaResponse readResponse = client .schemaService .readSchema (readRequest );
3340 assertThat (readResponse .getSchemaText ()).contains ("definition document" );
3441 assertThat (readResponse .getSchemaText ()).contains ("definition user" );
3542 }
3643
3744 @ Test
3845 public void testSchemaWithCaveats () {
39- var client = new TestClient ();
46+ TestClient client = new TestClient ();
4047 writeTestSchema (client );
4148 }
4249
4350 // For an example with flow control, see
4451 // https://github.com/grpc/grpc-java/blob/9071c1ad7c842f4e73b6ae95b71f11c517b177a4/examples/src/main/java/io/grpc/examples/manualflowcontrol/ManualFlowControlClient.java
4552 @ Test
4653 public void testCheck () {
47- var client = new TestClient ();
54+ TestClient client = new TestClient ();
4855 writeTestSchema (client );
49- var testTuples = writeTestTuples (client );
56+ TestTuples testTuples = writeTestTuples (client );
5057
51- var firstResponse = client .permissionsService .checkPermission (CheckPermissionRequest .newBuilder ()
58+ CheckPermissionResponse firstResponse = client .permissionsService .checkPermission (CheckPermissionRequest .newBuilder ()
5259 .setConsistency (fullyConsistent )
5360 .setResource (testTuples .postOne )
5461 .setSubject (testTuples .emilia )
5562 .setPermission ("view" )
5663 .build ());
5764 assertThat (firstResponse .getPermissionship ()).isEqualTo (CheckPermissionResponse .Permissionship .PERMISSIONSHIP_HAS_PERMISSION );
5865
59- var secondResponse = client .permissionsService .checkPermission (CheckPermissionRequest .newBuilder ()
66+ CheckPermissionResponse secondResponse = client .permissionsService .checkPermission (CheckPermissionRequest .newBuilder ()
6067 .setConsistency (fullyConsistent )
6168 .setResource (testTuples .postOne )
6269 .setSubject (testTuples .emilia )
6370 .setPermission ("write" )
6471 .build ());
6572 assertThat (secondResponse .getPermissionship ()).isEqualTo (CheckPermissionResponse .Permissionship .PERMISSIONSHIP_HAS_PERMISSION );
6673
67- var thirdResponse = client .permissionsService .checkPermission (CheckPermissionRequest .newBuilder ()
74+ CheckPermissionResponse thirdResponse = client .permissionsService .checkPermission (CheckPermissionRequest .newBuilder ()
6875 .setConsistency (fullyConsistent )
6976 .setResource (testTuples .postOne )
7077 .setSubject (testTuples .beatrice )
7178 .setPermission ("view" )
7279 .build ());
7380 assertThat (thirdResponse .getPermissionship ()).isEqualTo (CheckPermissionResponse .Permissionship .PERMISSIONSHIP_HAS_PERMISSION );
7481
75- var fourthResponse = client .permissionsService .checkPermission (CheckPermissionRequest .newBuilder ()
82+ CheckPermissionResponse fourthResponse = client .permissionsService .checkPermission (CheckPermissionRequest .newBuilder ()
7683 .setConsistency (fullyConsistent )
7784 .setResource (testTuples .postOne )
7885 .setSubject (testTuples .beatrice )
@@ -83,13 +90,13 @@ public void testCheck() {
8390
8491 @ Test
8592 public void testCaveatedCheck () {
86- var client = new TestClient ();
93+ TestClient client = new TestClient ();
8794 writeTestSchema (client );
88- var testTuples = writeTestTuples (client );
95+ TestTuples testTuples = writeTestTuples (client );
8996
9097 // Likes Harry Potter
91- var likesContext = Struct .newBuilder ().putFields ("likes" , Value .newBuilder ().setBoolValue (true ).build ()).build ();
92- var firstResponse = client .permissionsService .checkPermission (CheckPermissionRequest .newBuilder ()
98+ Struct likesContext = Struct .newBuilder ().putFields ("likes" , Value .newBuilder ().setBoolValue (true ).build ()).build ();
99+ CheckPermissionResponse firstResponse = client .permissionsService .checkPermission (CheckPermissionRequest .newBuilder ()
93100 .setConsistency (fullyConsistent )
94101 .setResource (testTuples .postOne )
95102 .setSubject (testTuples .beatrice )
@@ -99,8 +106,8 @@ public void testCaveatedCheck() {
99106 assertThat (firstResponse .getPermissionship ()).isEqualTo (CheckPermissionResponse .Permissionship .PERMISSIONSHIP_HAS_PERMISSION );
100107
101108 // No longer likes Harry Potter
102- var dislikesContext = Struct .newBuilder ().putFields ("likes" , Value .newBuilder ().setBoolValue (false ).build ()).build ();
103- var secondResponse = client .permissionsService .checkPermission (CheckPermissionRequest .newBuilder ()
109+ Struct dislikesContext = Struct .newBuilder ().putFields ("likes" , Value .newBuilder ().setBoolValue (false ).build ()).build ();
110+ CheckPermissionResponse secondResponse = client .permissionsService .checkPermission (CheckPermissionRequest .newBuilder ()
104111 .setConsistency (fullyConsistent )
105112 .setResource (testTuples .postOne )
106113 .setSubject (testTuples .beatrice )
@@ -110,7 +117,7 @@ public void testCaveatedCheck() {
110117 assertThat (secondResponse .getPermissionship ()).isEqualTo (CheckPermissionResponse .Permissionship .PERMISSIONSHIP_NO_PERMISSION );
111118
112119 // No longer likes Harry Potter
113- var thirdResponse = client .permissionsService .checkPermission (CheckPermissionRequest .newBuilder ()
120+ CheckPermissionResponse thirdResponse = client .permissionsService .checkPermission (CheckPermissionRequest .newBuilder ()
114121 .setConsistency (fullyConsistent )
115122 .setResource (testTuples .postOne )
116123 .setSubject (testTuples .beatrice )
@@ -122,19 +129,19 @@ public void testCaveatedCheck() {
122129
123130 @ Test
124131 public void testLookupResources () {
125- var client = new TestClient ();
132+ TestClient client = new TestClient ();
126133 writeTestSchema (client );
127- var testTuples = writeTestTuples (client );
134+ TestTuples testTuples = writeTestTuples (client );
128135
129- var lookupResourcesRequest = LookupResourcesRequest .newBuilder ()
136+ LookupResourcesRequest lookupResourcesRequest = LookupResourcesRequest .newBuilder ()
130137 .setConsistency (fullyConsistent )
131138 .setResourceObjectType ("post" )
132139 .setSubject (testTuples .emilia )
133140 .setPermission ("write" )
134141 .build ();
135142
136- var resp = client .permissionsService .lookupResources (lookupResourcesRequest );
137- var resources = new HashSet <String >();
143+ Iterator < LookupResourcesResponse > resp = client .permissionsService .lookupResources (lookupResourcesRequest );
144+ HashSet < String > resources = new HashSet <String >();
138145 resp .forEachRemaining (lookupResourcesResponse -> resources .add (lookupResourcesResponse .getResourceObjectId ()));
139146
140147 assertThat (resources ).contains (testTuples .postOne .getObjectId ());
@@ -144,19 +151,19 @@ public void testLookupResources() {
144151
145152 @ Test
146153 public void testLookupSubjects () {
147- var client = new TestClient ();
154+ TestClient client = new TestClient ();
148155 writeTestSchema (client );
149- var testTuples = writeTestTuples (client );
156+ TestTuples testTuples = writeTestTuples (client );
150157
151- var lookupSubjectsRequest = LookupSubjectsRequest .newBuilder ()
158+ LookupSubjectsRequest lookupSubjectsRequest = LookupSubjectsRequest .newBuilder ()
152159 .setConsistency (fullyConsistent )
153160 .setSubjectObjectType ("user" )
154161 .setResource (testTuples .postOne )
155162 .setPermission ("view" )
156163 .build ();
157164
158- var resp = client .permissionsService .lookupSubjects (lookupSubjectsRequest );
159- var users = new HashSet <String >();
165+ Iterator < LookupSubjectsResponse > resp = client .permissionsService .lookupSubjects (lookupSubjectsRequest );
166+ HashSet < String > users = new HashSet <String >();
160167 resp .forEachRemaining (response ->
161168 users .add (response .getSubject ().getSubjectObjectId ()));
162169
@@ -167,11 +174,11 @@ public void testLookupSubjects() {
167174
168175 @ Test
169176 public void testCheckBulkPermissions () {
170- var client = new TestClient ();
177+ TestClient client = new TestClient ();
171178 writeTestSchema (client );
172- var testTuples = writeTestTuples (client );
179+ TestTuples testTuples = writeTestTuples (client );
173180
174- var checkBulkPermissionsRequest = CheckBulkPermissionsRequest .newBuilder ()
181+ CheckBulkPermissionsRequest checkBulkPermissionsRequest = CheckBulkPermissionsRequest .newBuilder ()
175182 .setConsistency (fullyConsistent )
176183 .addItems (CheckBulkPermissionsRequestItem .newBuilder ()
177184 .setResource (testTuples .postOne )
@@ -183,32 +190,32 @@ public void testCheckBulkPermissions() {
183190 .setSubject (testTuples .emilia ))
184191 .build ();
185192
186- var response = client .permissionsService .checkBulkPermissions (checkBulkPermissionsRequest );
193+ CheckBulkPermissionsResponse response = client .permissionsService .checkBulkPermissions (checkBulkPermissionsRequest );
187194 assertThat (response .getPairsList ()).hasSize (2 );
188195 assertThat (response .getPairs (0 ).getItem ().getPermissionship ()).isEqualTo (CheckPermissionResponse .Permissionship .PERMISSIONSHIP_HAS_PERMISSION );
189196 assertThat (response .getPairs (1 ).getItem ().getPermissionship ()).isEqualTo (CheckPermissionResponse .Permissionship .PERMISSIONSHIP_HAS_PERMISSION );
190197 }
191198
192199 @ Test
193200 public void testBulkImport () throws InterruptedException {
194- var client = new TestClient ();
201+ TestClient client = new TestClient ();
195202 writeTestSchema (client );
196203 writeTestTuples (client );
197204
198205 // Validate export
199- var exportCall = client .permissionsService .exportBulkRelationships (ExportBulkRelationshipsRequest .newBuilder ()
206+ Iterator < ExportBulkRelationshipsResponse > exportCall = client .permissionsService .exportBulkRelationships (ExportBulkRelationshipsRequest .newBuilder ()
200207 .setConsistency (fullyConsistent )
201208 .build ());
202209
203- var relations = new HashSet <Relationship >();
210+ HashSet < Relationship > relations = new HashSet <Relationship >();
204211 exportCall .forEachRemaining (response ->
205212 relations .addAll (response .getRelationshipsList ()));
206213
207214 assertThat (relations ).hasSize (4 );
208215
209216 // Note that this has a different preshared key
210217 // Validate import
211- var emptyClient = new TestClient ();
218+ TestClient emptyClient = new TestClient ();
212219 writeTestSchema (emptyClient );
213220
214221 final CountDownLatch done = new CountDownLatch (1 );
@@ -236,20 +243,20 @@ public void onCompleted() {
236243 }
237244
238245 // Do the import
239- var importObserver = new ImportBulkObserver ();
240- var wrappedObserver = client .asyncPermissionsService .importBulkRelationships (importObserver );
246+ ImportBulkObserver importObserver = new ImportBulkObserver ();
247+ StreamObserver < ImportBulkRelationshipsRequest > wrappedObserver = client .asyncPermissionsService .importBulkRelationships (importObserver );
241248 wrappedObserver .onNext (ImportBulkRelationshipsRequest .newBuilder ()
242249 .addAllRelationships (relations ).build ());
243250 wrappedObserver .onCompleted ();
244251
245252 done .await ();
246253
247254 // Validate that everything was loaded
248- var postImportExportCall = client .permissionsService .exportBulkRelationships (ExportBulkRelationshipsRequest .newBuilder ()
255+ Iterator < ExportBulkRelationshipsResponse > postImportExportCall = client .permissionsService .exportBulkRelationships (ExportBulkRelationshipsRequest .newBuilder ()
249256 .setConsistency (fullyConsistent )
250257 .build ());
251258
252- var importedRelations = new HashSet <Relationship >();
259+ HashSet < Relationship > importedRelations = new HashSet <Relationship >();
253260 postImportExportCall .forEachRemaining (response ->
254261 importedRelations .addAll (response .getRelationshipsList ()));
255262
@@ -260,10 +267,10 @@ public void onCompleted() {
260267
261268
262269 private TestTuples writeTestTuples (TestClient client ) {
263- var emilia = SubjectReference .newBuilder ().setObject (ObjectReference .newBuilder ().setObjectId ("emilia" ).setObjectType ("user" ).build ()).build ();
264- var beatrice = SubjectReference .newBuilder ().setObject (ObjectReference .newBuilder ().setObjectId ("beatrice" ).setObjectType ("user" ).build ()).build ();
265- var postOne = ObjectReference .newBuilder ().setObjectId ("post-one" ).setObjectType ("post" ).build ();
266- var postTwo = ObjectReference .newBuilder ().setObjectId ("post-two" ).setObjectType ("post" ).build ();
270+ SubjectReference emilia = SubjectReference .newBuilder ().setObject (ObjectReference .newBuilder ().setObjectId ("emilia" ).setObjectType ("user" ).build ()).build ();
271+ SubjectReference beatrice = SubjectReference .newBuilder ().setObject (ObjectReference .newBuilder ().setObjectId ("beatrice" ).setObjectType ("user" ).build ()).build ();
272+ ObjectReference postOne = ObjectReference .newBuilder ().setObjectId ("post-one" ).setObjectType ("post" ).build ();
273+ ObjectReference postTwo = ObjectReference .newBuilder ().setObjectId ("post-two" ).setObjectType ("post" ).build ();
267274 WriteRelationshipsRequest .Builder builder = WriteRelationshipsRequest .newBuilder ()
268275 .addUpdates (
269276 RelationshipUpdate .newBuilder ()
@@ -306,22 +313,18 @@ private TestTuples writeTestTuples(TestClient client) {
306313 }
307314
308315 private void writeTestSchema (TestClient client ) {
309- String schema = """
310- caveat likes_harry_potter(likes bool) {
311- likes == true
312- }
313-
314- definition post {
315- relation writer: user
316- relation reader: user
317- relation caveated_reader: user with likes_harry_potter
318-
319- permission write = writer
320- permission view = reader + writer
321- permission view_as_fan = caveated_reader + writer
322- }
323- definition user {}
324- """ ;
316+ String schema = "caveat likes_harry_potter(likes bool) {\n "
317+ + "likes == true\n "
318+ + "}\n "
319+ + "definition post {\n "
320+ + "relation writer: user\n "
321+ + "relation reader: user\n "
322+ + "relation caveated_reader: user with likes_harry_potter\n "
323+ + "permission write = writer\n "
324+ + "permission view = reader + writer\n "
325+ + "permission view_as_fan = caveated_reader + writer\n "
326+ + "}\n "
327+ + "definition user {}" ;
325328 writeSchema (client , schema );
326329 }
327330
0 commit comments