1818import static com .amazon .opendistroforelasticsearch .commons .ConfigConstants .OPENDISTRO_SECURITY_USER_AND_ROLES ;
1919import static org .junit .Assert .assertEquals ;
2020import static org .junit .Assert .assertFalse ;
21+ import static org .junit .Assert .assertNull ;
2122import static org .junit .Assert .assertTrue ;
2223
2324import java .io .IOException ;
3233
3334public class UserTest {
3435
35- User testUser () {
36+ User testNoTenantUser () {
3637 return new User ("chip" , Arrays .asList ("admin" , "ops" ), Arrays .asList ("ops_data" ), Arrays .asList ("attr1" , "attr2" ));
3738 }
3839
40+ User testTenantUser () {
41+ return new User ("chip" , Arrays .asList ("admin" , "ops" ), Arrays .asList ("ops_data" ), Arrays .asList ("attr1" , "attr2" ), "__user__" );
42+ }
43+
3944 @ Test
4045 public void testEmptyConst () {
4146 User user = new User ();
4247 assertEquals ("" , user .getName ());
4348 assertEquals (0 , user .getBackendRoles ().size ());
4449 assertEquals (0 , user .getRoles ().size ());
4550 assertEquals (0 , user .getCustomAttNames ().size ());
51+ assertEquals (null , user .getRequestedTenant ());
52+ }
53+
54+ @ Test
55+ public void testParamsConstForNoTenantUser () {
56+ User user = testNoTenantUser ();
57+ assertFalse (Strings .isNullOrEmpty (user .getName ()));
58+ assertEquals (2 , user .getBackendRoles ().size ());
59+ assertEquals (1 , user .getRoles ().size ());
60+ assertEquals (2 , user .getCustomAttNames ().size ());
61+ assertNull (user .getRequestedTenant ());
4662 }
4763
4864 @ Test
49- public void testParamsConst () {
50- User user = testUser ();
65+ public void testParamsConstForTenantUser () {
66+ User user = testTenantUser ();
5167 assertFalse (Strings .isNullOrEmpty (user .getName ()));
5268 assertEquals (2 , user .getBackendRoles ().size ());
5369 assertEquals (1 , user .getRoles ().size ());
5470 assertEquals (2 , user .getCustomAttNames ().size ());
71+ assertFalse (Strings .isNullOrEmpty (user .getRequestedTenant ()));
5572 }
5673
5774 @ Test
58- public void testJsonConst () throws IOException {
75+ public void testNullTenantJsonConst () throws IOException {
5976 String json =
6077 "{\" user\" :\" User [name=chip, backend_roles=[admin], requestedTenant=null]\" ,\" user_name\" :\" chip\" ,\" user_requested_tenant\" :null,\" remote_address\" :\" 127.0.0.1:52196\" ,\" backend_roles\" :[\" admin\" ],\" custom_attribute_names\" :[],\" roles\" :[\" alerting_monitor_full\" ,\" ops_role\" ,\" own_index\" ],\" tenants\" :{\" chip\" :true},\" principal\" :null,\" peer_certificates\" :\" 0\" ,\" sso_logout_url\" :null}" ;
6178
@@ -64,11 +81,36 @@ public void testJsonConst() throws IOException {
6481 assertEquals (1 , user .getBackendRoles ().size ());
6582 assertEquals (3 , user .getRoles ().size ());
6683 assertEquals (0 , user .getCustomAttNames ().size ());
84+ assertNull (user .getRequestedTenant ());
85+ }
86+
87+ @ Test
88+ public void testNonNullTenantJsonConst () throws IOException {
89+ String json =
90+ "{\" user\" :\" User [name=chip, backend_roles=[admin], requestedTenant=__user__]\" ,\" user_name\" :\" chip\" ,\" user_requested_tenant\" :\" __user__\" ,\" remote_address\" :\" 127.0.0.1:52196\" ,\" backend_roles\" :[\" admin\" ],\" custom_attribute_names\" :[],\" roles\" :[\" alerting_monitor_full\" ,\" ops_role\" ,\" own_index\" ],\" tenants\" :{\" chip\" :true},\" principal\" :null,\" peer_certificates\" :\" 0\" ,\" sso_logout_url\" :null}" ;
91+
92+ User user = new User (json );
93+ assertEquals ("chip" , user .getName ());
94+ assertEquals (1 , user .getBackendRoles ().size ());
95+ assertEquals (3 , user .getRoles ().size ());
96+ assertEquals (0 , user .getCustomAttNames ().size ());
97+ assertEquals ("__user__" , user .getRequestedTenant ());
98+ }
99+
100+ @ Test
101+ public void testStreamConstForNoTenantUser () throws IOException {
102+ User user = testNoTenantUser ();
103+ BytesStreamOutput out = new BytesStreamOutput ();
104+ user .writeTo (out );
105+ StreamInput in = StreamInput .wrap (out .bytes ().toBytesRef ().bytes );
106+ User newUser = new User (in );
107+ assertEquals ("Round tripping User doesn't work" , user .toString (), newUser .toString ());
108+ assertEquals ("Round tripping User doesn't work" , user , newUser );
67109 }
68110
69111 @ Test
70- public void testStreamConst () throws IOException {
71- User user = testUser ();
112+ public void testStreamConstForTenantUser () throws IOException {
113+ User user = testTenantUser ();
72114 BytesStreamOutput out = new BytesStreamOutput ();
73115 user .writeTo (out );
74116 StreamInput in = StreamInput .wrap (out .bytes ().toBytesRef ().bytes );
@@ -80,7 +122,7 @@ public void testStreamConst() throws IOException {
80122 @ Test
81123 public void testParseUserString () {
82124 ThreadContext tc = new ThreadContext (Settings .EMPTY );
83- tc .putTransient ("user_roles_string" , "myuser|bckrole1,bckrol2|role1,role2" );
125+ tc .putTransient ("user_roles_string" , "myuser|bckrole1,bckrol2|role1,role2|myTenant " );
84126 String str = tc .getTransient ("user_roles_string" );
85127 User user = User .parse (str );
86128
@@ -89,6 +131,7 @@ public void testParseUserString() {
89131 assertEquals (2 , user .getRoles ().size ());
90132 assertTrue (user .getRoles ().contains ("role1" ));
91133 assertTrue (user .getRoles ().contains ("role2" ));
134+ assertEquals ("myTenant" , user .getRequestedTenant ());
92135 }
93136
94137 @ Test
@@ -111,6 +154,19 @@ public void testParseUserStringName() {
111154 assertEquals (0 , user .getRoles ().size ());
112155 }
113156
157+ @ Test
158+ public void testParseUserStringNameWithTenant () {
159+ ThreadContext tc = new ThreadContext (Settings .EMPTY );
160+ tc .putTransient (OPENDISTRO_SECURITY_USER_AND_ROLES , "myuser|||myTenant" );
161+ String str = tc .getTransient (OPENDISTRO_SECURITY_USER_AND_ROLES );
162+ User user = User .parse (str );
163+
164+ assertEquals ("myuser" , user .getName ());
165+ assertEquals (0 , user .getBackendRoles ().size ());
166+ assertEquals (0 , user .getRoles ().size ());
167+ assertEquals ("myTenant" , user .getRequestedTenant ());
168+ }
169+
114170 @ Test
115171 public void testParseUserStringNobackendRoles () {
116172 ThreadContext tc = new ThreadContext (Settings .EMPTY );
@@ -135,6 +191,19 @@ public void testParseUserStringNoRoles() {
135191 assertEquals (0 , user .getRoles ().size ());
136192 }
137193
194+ @ Test
195+ public void testParseUserStringNoRolesWithTenant () {
196+ ThreadContext tc = new ThreadContext (Settings .EMPTY );
197+ tc .putTransient (OPENDISTRO_SECURITY_USER_AND_ROLES , "myuser|brole1,brole2||myTenant" );
198+ String str = tc .getTransient (OPENDISTRO_SECURITY_USER_AND_ROLES );
199+ User user = User .parse (str );
200+
201+ assertEquals ("myuser" , user .getName ());
202+ assertEquals (2 , user .getBackendRoles ().size ());
203+ assertEquals (0 , user .getRoles ().size ());
204+ assertEquals ("myTenant" , user .getRequestedTenant ());
205+ }
206+
138207 @ Test
139208 public void testParseUserStringMalformed () {
140209 ThreadContext tc = new ThreadContext (Settings .EMPTY );
0 commit comments