Exemplo n.º 1
0
        public virtual void TestContainerLaunchError()
        {
            if (Shell.Windows)
            {
                BaseTmpPath = new Path(new FilePath("target").GetAbsolutePath(), typeof(TestDefaultContainerExecutor
                                                                                        ).Name);
            }
            Path           localDir  = new Path(BaseTmpPath, "localDir");
            IList <string> localDirs = new AList <string>();

            localDirs.AddItem(localDir.ToString());
            IList <string> logDirs = new AList <string>();
            Path           logDir  = new Path(BaseTmpPath, "logDir");

            logDirs.AddItem(logDir.ToString());
            Configuration conf = new Configuration();

            conf.Set(CommonConfigurationKeys.FsPermissionsUmaskKey, "077");
            conf.Set(YarnConfiguration.NmLocalDirs, localDir.ToString());
            conf.Set(YarnConfiguration.NmLogDirs, logDir.ToString());
            FileContext lfs = FileContext.GetLocalFSFileContext(conf);
            DefaultContainerExecutor mockExec = Org.Mockito.Mockito.Spy(new DefaultContainerExecutor
                                                                            (lfs));

            mockExec.SetConf(conf);
            Org.Mockito.Mockito.DoAnswer(new _Answer_245()).When(mockExec).LogOutput(Matchers.Any
                                                                                     <string>());
            string appSubmitter = "nobody";
            string appId        = "APP_ID";
            string containerId  = "CONTAINER_ID";

            Org.Apache.Hadoop.Yarn.Server.Nodemanager.Containermanager.Container.Container container
                = Org.Mockito.Mockito.Mock <Org.Apache.Hadoop.Yarn.Server.Nodemanager.Containermanager.Container.Container
                                            >();
            ContainerId            cId     = Org.Mockito.Mockito.Mock <ContainerId>();
            ContainerLaunchContext context = Org.Mockito.Mockito.Mock <ContainerLaunchContext>
                                                 ();
            Dictionary <string, string> env = new Dictionary <string, string>();

            Org.Mockito.Mockito.When(container.GetContainerId()).ThenReturn(cId);
            Org.Mockito.Mockito.When(container.GetLaunchContext()).ThenReturn(context);
            try
            {
                Org.Mockito.Mockito.DoAnswer(new _Answer_268()).When(container).Handle(Matchers.Any
                                                                                       <ContainerDiagnosticsUpdateEvent>());
                Org.Mockito.Mockito.When(cId.ToString()).ThenReturn(containerId);
                Org.Mockito.Mockito.When(cId.GetApplicationAttemptId()).ThenReturn(ApplicationAttemptId
                                                                                   .NewInstance(ApplicationId.NewInstance(0, 1), 0));
                Org.Mockito.Mockito.When(context.GetEnvironment()).ThenReturn(env);
                mockExec.CreateUserLocalDirs(localDirs, appSubmitter);
                mockExec.CreateUserCacheDirs(localDirs, appSubmitter);
                mockExec.CreateAppDirs(localDirs, appSubmitter, appId);
                mockExec.CreateAppLogDirs(appId, logDirs, appSubmitter);
                Path scriptPath = new Path("file:///bin/echo");
                Path tokensPath = new Path("file:///dev/null");
                if (Shell.Windows)
                {
                    FilePath       tmp    = new FilePath(BaseTmpPath.ToString(), "test_echo.cmd");
                    BufferedWriter output = new BufferedWriter(new FileWriter(tmp));
                    output.Write("Exit 1");
                    output.Write("Echo No such file or directory 1>&2");
                    output.Close();
                    scriptPath = new Path(tmp.GetAbsolutePath());
                    tmp        = new FilePath(BaseTmpPath.ToString(), "tokens");
                    tmp.CreateNewFile();
                    tokensPath = new Path(tmp.GetAbsolutePath());
                }
                Path workDir = localDir;
                Path pidFile = new Path(workDir, "pid.txt");
                mockExec.Init();
                mockExec.ActivateContainer(cId, pidFile);
                int ret = mockExec.LaunchContainer(container, scriptPath, tokensPath, appSubmitter
                                                   , appId, workDir, localDirs, localDirs);
                NUnit.Framework.Assert.AreNotSame(0, ret);
            }
            finally
            {
                mockExec.DeleteAsUser(appSubmitter, localDir);
                mockExec.DeleteAsUser(appSubmitter, logDir);
            }
        }
Exemplo n.º 2
0
        public virtual void TestDirPermissions()
        {
            DeleteTmpFiles();
            string       user          = "******";
            string       appId         = "app_12345_123";
            FsPermission userCachePerm = new FsPermission(DefaultContainerExecutor.UserPerm);
            FsPermission appCachePerm  = new FsPermission(DefaultContainerExecutor.AppcachePerm
                                                          );
            FsPermission fileCachePerm = new FsPermission(DefaultContainerExecutor.FilecachePerm
                                                          );
            FsPermission   appDirPerm = new FsPermission(DefaultContainerExecutor.AppdirPerm);
            FsPermission   logDirPerm = new FsPermission(DefaultContainerExecutor.LogdirPerm);
            IList <string> localDirs  = new AList <string>();

            localDirs.AddItem(new Path(BaseTmpPath, "localDirA").ToString());
            localDirs.AddItem(new Path(BaseTmpPath, "localDirB").ToString());
            IList <string> logDirs = new AList <string>();

            logDirs.AddItem(new Path(BaseTmpPath, "logDirA").ToString());
            logDirs.AddItem(new Path(BaseTmpPath, "logDirB").ToString());
            Configuration conf = new Configuration();

            conf.Set(CommonConfigurationKeys.FsPermissionsUmaskKey, "077");
            FileContext lfs = FileContext.GetLocalFSFileContext(conf);
            DefaultContainerExecutor executor = new DefaultContainerExecutor(lfs);

            executor.Init();
            try
            {
                executor.CreateUserLocalDirs(localDirs, user);
                executor.CreateUserCacheDirs(localDirs, user);
                executor.CreateAppDirs(localDirs, user, appId);
                foreach (string dir in localDirs)
                {
                    FileStatus stats = lfs.GetFileStatus(new Path(new Path(dir, ContainerLocalizer.Usercache
                                                                           ), user));
                    NUnit.Framework.Assert.AreEqual(userCachePerm, stats.GetPermission());
                }
                foreach (string dir_1 in localDirs)
                {
                    Path userCachePath = new Path(new Path(dir_1, ContainerLocalizer.Usercache), user
                                                  );
                    Path       appCachePath = new Path(userCachePath, ContainerLocalizer.Appcache);
                    FileStatus stats        = lfs.GetFileStatus(appCachePath);
                    NUnit.Framework.Assert.AreEqual(appCachePerm, stats.GetPermission());
                    stats = lfs.GetFileStatus(new Path(userCachePath, ContainerLocalizer.Filecache));
                    NUnit.Framework.Assert.AreEqual(fileCachePerm, stats.GetPermission());
                    stats = lfs.GetFileStatus(new Path(appCachePath, appId));
                    NUnit.Framework.Assert.AreEqual(appDirPerm, stats.GetPermission());
                }
                executor.CreateAppLogDirs(appId, logDirs, user);
                foreach (string dir_2 in logDirs)
                {
                    FileStatus stats = lfs.GetFileStatus(new Path(dir_2, appId));
                    NUnit.Framework.Assert.AreEqual(logDirPerm, stats.GetPermission());
                }
            }
            finally
            {
                DeleteTmpFiles();
            }
        }