blob: 54b8e6cc32ceb960eb6e3ccee6d834f9017dacc5 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.solr.client.solrj.response;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.io.IOUtils;
import org.apache.solr.SolrTestCase;
import org.apache.solr.client.solrj.ResponseParser;
import org.apache.solr.client.solrj.request.DelegationTokenRequest;
import org.apache.solr.common.SolrException;
import org.junit.Test;
import org.noggit.CharArr;
import org.noggit.JSONWriter;
public class TestDelegationTokenResponse extends SolrTestCase {
private void delegationTokenResponse(@SuppressWarnings({"rawtypes"})DelegationTokenRequest request,
DelegationTokenResponse response, String responseBody) throws Exception {
ResponseParser parser = request.getResponseParser();
response.setResponse(parser.processResponse(
IOUtils.toInputStream(responseBody, "UTF-8"), "UTF-8"));
}
private String getNestedMapJson(String outerKey, String innerKey, Object innerValue) {
CharArr out = new CharArr();
JSONWriter w = new JSONWriter(out, 2);
Map<String, Object> innerMap = new HashMap<String, Object>();
innerMap.put(innerKey, innerValue);
Map<String, Map<String, Object>> outerMap = new HashMap<String, Map<String, Object>>();
outerMap.put(outerKey, innerMap);
w.write(outerMap);
return out.toString();
}
private String getMapJson(String key, Object value) {
CharArr out = new CharArr();
JSONWriter w = new JSONWriter(out, 2);
Map<String, Object> map = new HashMap<String, Object>();
map.put(key, value);
w.write(map);
return out.toString();
}
@Test
// commented out on: 24-Dec-2018 @BadApple(bugUrl="https://issues.apache.org/jira/browse/SOLR-12028") // added 20-Sep-2018
public void testGetResponse() throws Exception {
DelegationTokenRequest.Get getRequest = new DelegationTokenRequest.Get();
DelegationTokenResponse.Get getResponse = new DelegationTokenResponse.Get();
// not a map
expectThrows(SolrException.class, () -> {
delegationTokenResponse(getRequest, getResponse, "");
getResponse.getDelegationToken();
});
// doesn't have Token outerMap
final String someToken = "someToken";
delegationTokenResponse(getRequest, getResponse, getNestedMapJson("NotToken", "urlString", someToken));
assertNull(getResponse.getDelegationToken());
// Token is not a map
delegationTokenResponse(getRequest, getResponse, getMapJson("Token", someToken));
expectThrows(SolrException.class, getResponse::getDelegationToken);
// doesn't have urlString
delegationTokenResponse(getRequest, getResponse, getNestedMapJson("Token", "notUrlString", someToken));
assertNull(getResponse.getDelegationToken());
// has Token + urlString
delegationTokenResponse(getRequest, getResponse, getNestedMapJson("Token", "urlString", someToken));
assertEquals(someToken, getResponse.getDelegationToken());
}
@Test
// commented out on: 24-Dec-2018 @BadApple(bugUrl="https://issues.apache.org/jira/browse/SOLR-12028") // added 20-Sep-2018
public void testRenewResponse() throws Exception {
DelegationTokenRequest.Renew renewRequest = new DelegationTokenRequest.Renew("token");
DelegationTokenResponse.Renew renewResponse = new DelegationTokenResponse.Renew();
// not a map
expectThrows(SolrException.class, () -> {
delegationTokenResponse(renewRequest, renewResponse, "");
renewResponse.getExpirationTime();
});
// doesn't have long
delegationTokenResponse(renewRequest, renewResponse, getMapJson("notLong", "123"));
assertNull(renewResponse.getExpirationTime());
// long isn't valid
delegationTokenResponse(renewRequest, renewResponse, getMapJson("long", "aaa"));
expectThrows(SolrException.class, renewResponse::getExpirationTime);
// valid
Long expirationTime = Long.MAX_VALUE;
delegationTokenResponse(renewRequest, renewResponse,
getMapJson("long", expirationTime));
assertEquals(expirationTime, renewResponse.getExpirationTime());
}
@Test
public void testCancelResponse() throws Exception {
// expect empty response
DelegationTokenRequest.Cancel cancelRequest = new DelegationTokenRequest.Cancel("token");
DelegationTokenResponse.Cancel cancelResponse = new DelegationTokenResponse.Cancel();
delegationTokenResponse(cancelRequest, cancelResponse, "");
}
}