예제 #1
0
        public virtual void SetUp()
        {
            AppContext context = Org.Mockito.Mockito.Mock <AppContext>();

            Org.Mockito.Mockito.When(context.GetApplicationID()).ThenReturn(ApplicationId.NewInstance
                                                                                (0, 0));
            Org.Mockito.Mockito.When(context.GetApplicationName()).ThenReturn("AppName");
            Org.Mockito.Mockito.When(context.GetUser()).ThenReturn("User");
            Org.Mockito.Mockito.When(context.GetStartTime()).ThenReturn(Runtime.CurrentTimeMillis
                                                                            ());
            job = Org.Mockito.Mockito.Mock <Org.Apache.Hadoop.Mapreduce.V2.App.Job.Job>();
            Task task = Org.Mockito.Mockito.Mock <Task>();

            Org.Mockito.Mockito.When(job.GetTask(Any <TaskId>())).ThenReturn(task);
            JobId jobID = MRApps.ToJobID("job_01_01");

            Org.Mockito.Mockito.When(context.GetJob(jobID)).ThenReturn(job);
            Org.Mockito.Mockito.When(job.CheckAccess(Any <UserGroupInformation>(), Any <JobACL>
                                                         ())).ThenReturn(true);
            Org.Apache.Hadoop.Mapreduce.V2.App.Webapp.App app = new Org.Apache.Hadoop.Mapreduce.V2.App.Webapp.App
                                                                    (context);
            Configuration configuration = new Configuration();

            ctx           = Org.Mockito.Mockito.Mock <Controller.RequestContext>();
            appController = new AppControllerForTest(app, configuration, ctx);
            appController.GetProperty()[AMParams.JobId]  = "job_01_01";
            appController.GetProperty()[AMParams.TaskId] = "task_01_01_m01_01";
        }
예제 #2
0
        private bool HasAccess(Org.Apache.Hadoop.Mapreduce.V2.App.Job.Job job, HttpServletRequest
                               request)
        {
            string remoteUser = request.GetRemoteUser();

            if (remoteUser != null)
            {
                return(job.CheckAccess(UserGroupInformation.CreateRemoteUser(remoteUser), JobACL.
                                       ViewJob));
            }
            return(true);
        }
예제 #3
0
            /// <exception cref="System.IO.IOException"/>
            private void CheckAccess(Org.Apache.Hadoop.Mapreduce.V2.App.Job.Job job, JobACL jobOperation
                                     )
            {
                UserGroupInformation callerUGI;

                callerUGI = UserGroupInformation.GetCurrentUser();
                if (!job.CheckAccess(callerUGI, jobOperation))
                {
                    throw new IOException(new AccessControlException("User " + callerUGI.GetShortUserName
                                                                         () + " cannot perform operation " + jobOperation.ToString() + " on " + job.GetID
                                                                         ()));
                }
            }
예제 #4
0
        internal virtual bool HasAccess(Org.Apache.Hadoop.Mapreduce.V2.App.Job.Job job, HttpServletRequest
                                        request)
        {
            string remoteUser = request.GetRemoteUser();
            UserGroupInformation callerUGI = null;

            if (remoteUser != null)
            {
                callerUGI = UserGroupInformation.CreateRemoteUser(remoteUser);
            }
            if (callerUGI != null && !job.CheckAccess(callerUGI, JobACL.ViewJob))
            {
                return(false);
            }
            return(true);
        }
예제 #5
0
 public virtual void TestGetJob()
 {
     Org.Mockito.Mockito.When(job.CheckAccess(Any <UserGroupInformation>(), Any <JobACL>
                                                  ())).ThenReturn(false);
     appController.Job();
     Org.Mockito.Mockito.Verify(appController.Response()).SetContentType(MimeType.Text
                                                                         );
     NUnit.Framework.Assert.AreEqual("Access denied: User user does not have permission to view job job_01_01"
                                     , appController.GetData());
     Org.Mockito.Mockito.When(job.CheckAccess(Any <UserGroupInformation>(), Any <JobACL>
                                                  ())).ThenReturn(true);
     Sharpen.Collections.Remove(appController.GetProperty(), AMParams.JobId);
     appController.Job();
     NUnit.Framework.Assert.AreEqual("Access denied: User user does not have permission to view job job_01_01Bad Request: Missing job ID"
                                     , appController.GetData());
     appController.GetProperty()[AMParams.JobId] = "job_01_01";
     appController.Job();
     NUnit.Framework.Assert.AreEqual(typeof(JobPage), appController.GetClazz());
 }
예제 #6
0
            /// <exception cref="System.IO.IOException"/>
            private Org.Apache.Hadoop.Mapreduce.V2.App.Job.Job VerifyAndGetJob(JobId jobID, JobACL
                                                                               accessType, bool exceptionThrow)
            {
                Org.Apache.Hadoop.Mapreduce.V2.App.Job.Job job = this._enclosing.appContext.GetJob
                                                                     (jobID);
                if (job == null && exceptionThrow)
                {
                    throw new IOException("Unknown Job " + jobID);
                }
                UserGroupInformation ugi = UserGroupInformation.GetCurrentUser();

                if (job != null && !job.CheckAccess(ugi, accessType))
                {
                    throw new AccessControlException("User " + ugi.GetShortUserName() + " cannot perform operation "
                                                     + accessType.ToString() + " on " + jobID);
                }
                return(job);
            }
예제 #7
0
        public virtual void TestViewAclOnlyCannotModify()
        {
            TestMRClientService.MRAppWithClientService app = new TestMRClientService.MRAppWithClientService
                                                                 (this, 1, 0, false);
            Configuration conf = new Configuration();

            conf.SetBoolean(MRConfig.MrAclsEnabled, true);
            conf.Set(MRJobConfig.JobAclViewJob, "viewonlyuser");
            Org.Apache.Hadoop.Mapreduce.V2.App.Job.Job job = app.Submit(conf);
            app.WaitForState(job, JobState.Running);
            NUnit.Framework.Assert.AreEqual("Num tasks not correct", 1, job.GetTasks().Count);
            IEnumerator <Task> it = job.GetTasks().Values.GetEnumerator();
            Task task             = it.Next();

            app.WaitForState(task, TaskState.Running);
            TaskAttempt attempt = task.GetAttempts().Values.GetEnumerator().Next();

            app.WaitForState(attempt, TaskAttemptState.Running);
            UserGroupInformation viewOnlyUser = UserGroupInformation.CreateUserForTesting("viewonlyuser"
                                                                                          , new string[] {  });

            NUnit.Framework.Assert.IsTrue("viewonlyuser cannot view job", job.CheckAccess(viewOnlyUser
                                                                                          , JobACL.ViewJob));
            NUnit.Framework.Assert.IsFalse("viewonlyuser can modify job", job.CheckAccess(viewOnlyUser
                                                                                          , JobACL.ModifyJob));
            MRClientProtocol client = viewOnlyUser.DoAs(new _PrivilegedExceptionAction_223(conf
                                                                                           , app));
            KillJobRequest killJobRequest = recordFactory.NewRecordInstance <KillJobRequest>();

            killJobRequest.SetJobId(app.GetJobId());
            try
            {
                client.KillJob(killJobRequest);
                NUnit.Framework.Assert.Fail("viewonlyuser killed job");
            }
            catch (AccessControlException)
            {
            }
            // pass
            KillTaskRequest killTaskRequest = recordFactory.NewRecordInstance <KillTaskRequest
                                                                               >();

            killTaskRequest.SetTaskId(task.GetID());
            try
            {
                client.KillTask(killTaskRequest);
                NUnit.Framework.Assert.Fail("viewonlyuser killed task");
            }
            catch (AccessControlException)
            {
            }
            // pass
            KillTaskAttemptRequest killTaskAttemptRequest = recordFactory.NewRecordInstance <KillTaskAttemptRequest
                                                                                             >();

            killTaskAttemptRequest.SetTaskAttemptId(attempt.GetID());
            try
            {
                client.KillTaskAttempt(killTaskAttemptRequest);
                NUnit.Framework.Assert.Fail("viewonlyuser killed task attempt");
            }
            catch (AccessControlException)
            {
            }
            // pass
            FailTaskAttemptRequest failTaskAttemptRequest = recordFactory.NewRecordInstance <FailTaskAttemptRequest
                                                                                             >();

            failTaskAttemptRequest.SetTaskAttemptId(attempt.GetID());
            try
            {
                client.FailTaskAttempt(failTaskAttemptRequest);
                NUnit.Framework.Assert.Fail("viewonlyuser killed task attempt");
            }
            catch (AccessControlException)
            {
            }
        }
예제 #8
0
 public override bool CheckAccess(UserGroupInformation callerUGI, JobACL jobOperation
                                  )
 {
     return(job.CheckAccess(callerUGI, jobOperation));
 }
예제 #9
0
        public virtual void TestHsController()
        {
            AppContext    ctx   = Org.Mockito.Mockito.Mock <AppContext>();
            ApplicationId appId = ApplicationIdPBImpl.NewInstance(0, 5);

            Org.Mockito.Mockito.When(ctx.GetApplicationID()).ThenReturn(appId);
            AppForTest    app    = new AppForTest(ctx);
            Configuration config = new Configuration();

            Controller.RequestContext requestCtx = Org.Mockito.Mockito.Mock <Controller.RequestContext
                                                                             >();
            TestBlocks.HsControllerForTest controller = new TestBlocks.HsControllerForTest(app
                                                                                           , config, requestCtx);
            controller.Index();
            NUnit.Framework.Assert.AreEqual("JobHistory", controller.Get(Params.Title, string.Empty
                                                                         ));
            NUnit.Framework.Assert.AreEqual(typeof(HsJobPage), controller.JobPage());
            NUnit.Framework.Assert.AreEqual(typeof(HsCountersPage), controller.CountersPage()
                                            );
            NUnit.Framework.Assert.AreEqual(typeof(HsTasksPage), controller.TasksPage());
            NUnit.Framework.Assert.AreEqual(typeof(HsTaskPage), controller.TaskPage());
            NUnit.Framework.Assert.AreEqual(typeof(HsAttemptsPage), controller.AttemptsPage()
                                            );
            controller.Set(AMParams.JobId, "job_01_01");
            controller.Set(AMParams.TaskId, "task_01_01_m01_01");
            controller.Set(AMParams.TaskType, "m");
            controller.Set(AMParams.AttemptState, "State");
            Org.Apache.Hadoop.Mapreduce.V2.App.Job.Job job = Org.Mockito.Mockito.Mock <Org.Apache.Hadoop.Mapreduce.V2.App.Job.Job
                                                                                       >();
            Task task = Org.Mockito.Mockito.Mock <Task>();

            Org.Mockito.Mockito.When(job.GetTask(Matchers.Any <TaskId>())).ThenReturn(task);
            JobId jobID = MRApps.ToJobID("job_01_01");

            Org.Mockito.Mockito.When(ctx.GetJob(jobID)).ThenReturn(job);
            Org.Mockito.Mockito.When(job.CheckAccess(Matchers.Any <UserGroupInformation>(), Matchers.Any
                                                     <JobACL>())).ThenReturn(true);
            controller.Job();
            NUnit.Framework.Assert.AreEqual(typeof(HsJobPage), controller.GetClazz());
            controller.JobCounters();
            NUnit.Framework.Assert.AreEqual(typeof(HsCountersPage), controller.GetClazz());
            controller.TaskCounters();
            NUnit.Framework.Assert.AreEqual(typeof(HsCountersPage), controller.GetClazz());
            controller.Tasks();
            NUnit.Framework.Assert.AreEqual(typeof(HsTasksPage), controller.GetClazz());
            controller.Task();
            NUnit.Framework.Assert.AreEqual(typeof(HsTaskPage), controller.GetClazz());
            controller.Attempts();
            NUnit.Framework.Assert.AreEqual(typeof(HsAttemptsPage), controller.GetClazz());
            NUnit.Framework.Assert.AreEqual(typeof(HsConfPage), controller.ConfPage());
            NUnit.Framework.Assert.AreEqual(typeof(HsAboutPage), controller.AboutPage());
            controller.About();
            NUnit.Framework.Assert.AreEqual(typeof(HsAboutPage), controller.GetClazz());
            controller.Logs();
            NUnit.Framework.Assert.AreEqual(typeof(HsLogsPage), controller.GetClazz());
            controller.Nmlogs();
            NUnit.Framework.Assert.AreEqual(typeof(AggregatedLogsPage), controller.GetClazz()
                                            );
            NUnit.Framework.Assert.AreEqual(typeof(HsSingleCounterPage), controller.SingleCounterPage
                                                ());
            controller.SingleJobCounter();
            NUnit.Framework.Assert.AreEqual(typeof(HsSingleCounterPage), controller.GetClazz(
                                                ));
            controller.SingleTaskCounter();
            NUnit.Framework.Assert.AreEqual(typeof(HsSingleCounterPage), controller.GetClazz(
                                                ));
        }