TestProxyUgiManager.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:4k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.hdfsproxy;
  19. import org.apache.hadoop.security.UnixUserGroupInformation;
  20. import junit.framework.TestCase;
  21. /** Unit tests for ProxyUgiManager */
  22. public class TestProxyUgiManager extends TestCase {
  23.   private static final UnixUserGroupInformation root1Ugi = new UnixUserGroupInformation(
  24.       "root", new String[] { "group1" });
  25.   private static final UnixUserGroupInformation root2Ugi = new UnixUserGroupInformation(
  26.       "root", new String[] { "group2" });
  27.   private static final long ugiLifetime = 1000L; // milliseconds
  28.   /** Test caching functionality */
  29.   public void testCache() throws Exception {
  30.     ProxyUgiManager.saveToCache(root1Ugi);
  31.     UnixUserGroupInformation ugi = ProxyUgiManager.getUgiForUser(root1Ugi
  32.         .getUserName());
  33.     assertEquals(root1Ugi, ugi);
  34.     ProxyUgiManager.saveToCache(root2Ugi);
  35.     ugi = ProxyUgiManager.getUgiForUser(root2Ugi.getUserName());
  36.     assertEquals(root2Ugi, ugi);
  37.   }
  38.   /** Test clearCache method */
  39.   public void testClearCache() throws Exception {
  40.     UnixUserGroupInformation ugi = ProxyUgiManager.getUgiForUser(root1Ugi
  41.         .getUserName());
  42.     if (root1Ugi.equals(ugi)) {
  43.       ProxyUgiManager.saveToCache(root2Ugi);
  44.       ugi = ProxyUgiManager.getUgiForUser(root2Ugi.getUserName());
  45.       assertEquals(root2Ugi, ugi);
  46.       ProxyUgiManager.clearCache();
  47.       ugi = ProxyUgiManager.getUgiForUser(root2Ugi.getUserName());
  48.       assertFalse(root2Ugi.equals(ugi));
  49.     } else {
  50.       ProxyUgiManager.saveToCache(root1Ugi);
  51.       ugi = ProxyUgiManager.getUgiForUser(root1Ugi.getUserName());
  52.       assertEquals(root1Ugi, ugi);
  53.       ProxyUgiManager.clearCache();
  54.       ugi = ProxyUgiManager.getUgiForUser(root1Ugi.getUserName());
  55.       assertFalse(root1Ugi.equals(ugi));
  56.     }
  57.   }
  58.   /** Test cache timeout */
  59.   public void testTimeOut() throws Exception {
  60.     String[] users = new String[] { "root", "nobody", "SYSTEM",
  61.         "Administrator", "Administrators", "Guest" };
  62.     String realUser = null;
  63.     UnixUserGroupInformation ugi = null;
  64.     ProxyUgiManager.clearCache();
  65.     for (String user : users) {
  66.       ugi = ProxyUgiManager.getUgiForUser(user);
  67.       if (ugi != null) {
  68.         realUser = user;
  69.         break;
  70.       }
  71.     }
  72.     if (realUser != null) {
  73.       ProxyUgiManager.setUgiLifetime(ugiLifetime);
  74.       ProxyUgiManager.clearCache();
  75.       UnixUserGroupInformation[] fakedUgis = generateUgi(ProxyUgiManager.CLEANUP_THRESHOLD);
  76.       for (int i = 0; i < ProxyUgiManager.CLEANUP_THRESHOLD; i++) {
  77.         ProxyUgiManager.saveToCache(fakedUgis[i]);
  78.       }
  79.       assertTrue(ProxyUgiManager.getCacheSize() == ProxyUgiManager.CLEANUP_THRESHOLD);
  80.       Thread.sleep(ugiLifetime + 1000L);
  81.       UnixUserGroupInformation newugi = ProxyUgiManager.getUgiForUser(realUser);
  82.       assertTrue(ProxyUgiManager.getCacheSize() == ProxyUgiManager.CLEANUP_THRESHOLD + 1);
  83.       assertEquals(newugi, ugi);
  84.       Thread.sleep(ugiLifetime + 1000L);
  85.       newugi = ProxyUgiManager.getUgiForUser(realUser);
  86.       assertTrue(ProxyUgiManager.getCacheSize() == 1);
  87.       assertEquals(newugi, ugi);
  88.     }
  89.   }
  90.   private static UnixUserGroupInformation[] generateUgi(int size) {
  91.     UnixUserGroupInformation[] ugis = new UnixUserGroupInformation[size];
  92.     for (int i = 0; i < size; i++) {
  93.       ugis[i] = new UnixUserGroupInformation("user" + i,
  94.           new String[] { "group" });
  95.     }
  96.     return ugis;
  97.   }
  98. }