Queue() {
    
  }
@Test (timeout=5000)
  public void testQueue() throws IOException {
    File f = null;
    try {
      f = writeFile();

      QueueManager manager = new QueueManager(f.getCanonicalPath(), true);
      manager.setSchedulerInfo("first", "queueInfo");
      manager.setSchedulerInfo("second", "queueInfoqueueInfo");
      Queue root = manager.getRoot();
      assertThat(root.getChildren().size()).isEqualTo(2);
      Iterator<Queue> iterator = root.getChildren().iterator();
      Queue firstSubQueue = iterator.next();
      assertEquals("first", firstSubQueue.getName());
      assertEquals(
          firstSubQueue.getAcls().get("mapred.queue.first.acl-submit-job")
              .toString(),
          "Users [user1, user2] and members of the groups [group1, group2] are allowed");
      Queue secondSubQueue = iterator.next();
      assertEquals("second", secondSubQueue.getName());
      assertThat(secondSubQueue.getProperties().getProperty("key"))
          .isEqualTo("value");
      assertThat(secondSubQueue.getProperties().getProperty("key1"))
          .isEqualTo("value1");
      // test status
      assertThat(firstSubQueue.getState().getStateName())
          .isEqualTo("running");
      assertThat(secondSubQueue.getState().getStateName())
          .isEqualTo("stopped");

      Set<String> template = new HashSet<String>();
      template.add("first");
      template.add("second");
      assertEquals(manager.getLeafQueueNames(), template);

      // test user access

      UserGroupInformation mockUGI = mock(UserGroupInformation.class);
      when(mockUGI.getShortUserName()).thenReturn("user1");
      String[] groups = { "group1" };
      when(mockUGI.getGroupNames()).thenReturn(groups);
      assertTrue(manager.hasAccess("first", QueueACL.SUBMIT_JOB, mockUGI));
      assertFalse(manager.hasAccess("second", QueueACL.SUBMIT_JOB, mockUGI));
      assertFalse(manager.hasAccess("first", QueueACL.ADMINISTER_JOBS, mockUGI));
      when(mockUGI.getShortUserName()).thenReturn("user3");
      assertTrue(manager.hasAccess("first", QueueACL.ADMINISTER_JOBS, mockUGI));

      QueueAclsInfo[] qai = manager.getQueueAcls(mockUGI);
      assertThat(qai.length).isEqualTo(1);
      // test refresh queue
      manager.refreshQueues(getConfiguration(), null);

      iterator = root.getChildren().iterator();
      Queue firstSubQueue1 = iterator.next();
      Queue secondSubQueue1 = iterator.next();
      // tets equal method
      assertThat(firstSubQueue).isEqualTo(firstSubQueue1);
      assertThat(firstSubQueue1.getState().getStateName())
          .isEqualTo("running");
      assertThat(secondSubQueue1.getState().getStateName())
          .isEqualTo("stopped");

      assertThat(firstSubQueue1.getSchedulingInfo())
          .isEqualTo("queueInfo");
      assertThat(secondSubQueue1.getSchedulingInfo())
          .isEqualTo("queueInfoqueueInfo");

      // test JobQueueInfo
      assertThat(firstSubQueue.getJobQueueInfo().getQueueName())
          .isEqualTo("first");
      assertThat(firstSubQueue.getJobQueueInfo().getState().toString())
          .isEqualTo("running");
      assertThat(firstSubQueue.getJobQueueInfo().getSchedulingInfo())
          .isEqualTo("queueInfo");
      assertThat(secondSubQueue.getJobQueueInfo().getChildren().size())
          .isEqualTo(0);
      // test
      assertThat(manager.getSchedulerInfo("first")).isEqualTo("queueInfo");
      Set<String> queueJobQueueInfos = new HashSet<String>();
      for(JobQueueInfo jobInfo : manager.getJobQueueInfos()){
    	  queueJobQueueInfos.add(jobInfo.getQueueName());
      }
      Set<String> rootJobQueueInfos = new HashSet<String>();
      for(Queue queue : root.getChildren()){
    	  rootJobQueueInfos.add(queue.getJobQueueInfo().getQueueName());
      }
      assertEquals(queueJobQueueInfos, rootJobQueueInfos);
      // test getJobQueueInfoMapping
      assertThat(manager.getJobQueueInfoMapping().get("first").getQueueName())
          .isEqualTo("first");
      // test dumpConfiguration
      Writer writer = new StringWriter();

      Configuration conf = getConfiguration();
      conf.unset(DeprecatedQueueConfigurationParser.MAPRED_QUEUE_NAMES_KEY);
      QueueManager.dumpConfiguration(writer, f.getAbsolutePath(), conf);
      String result = writer.toString();
      assertTrue(result
          .indexOf("\"name\":\"first\",\"state\":\"running\",\"acl_submit_job\":\"user1,user2 group1,group2\",\"acl_administer_jobs\":\"user3,user4 group3,group4\",\"properties\":[],\"children\":[]") > 0);

      writer = new StringWriter();
      QueueManager.dumpConfiguration(writer, conf);
      result = writer.toString();
      assertTrue(result.contains("{\"queues\":[{\"name\":\"default\",\"state\":\"running\",\"acl_submit_job\":\"*\",\"acl_administer_jobs\":\"*\",\"properties\":[],\"children\":[]},{\"name\":\"q1\",\"state\":\"running\",\"acl_submit_job\":\" \",\"acl_administer_jobs\":\" \",\"properties\":[],\"children\":[{\"name\":\"q1:q2\",\"state\":\"running\",\"acl_submit_job\":\" \",\"acl_administer_jobs\":\" \",\"properties\":["));
      assertTrue(result.contains("{\"key\":\"capacity\",\"value\":\"20\"}"));
      assertTrue(result.contains("{\"key\":\"user-limit\",\"value\":\"30\"}"));
      assertTrue(result.contains("],\"children\":[]}]}]}"));
      // test constructor QueueAclsInfo
      QueueAclsInfo qi = new QueueAclsInfo();
      assertNull(qi.getQueueName());

    } finally {
      if (f != null) {
        f.delete();
      }
    }
  }