You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@reef.apache.org by do...@apache.org on 2016/03/02 20:42:57 UTC

reef git commit: [REEF-1228] Fix TestDriverConfigGenerator failure on the first test run [Forced Update!]

Repository: reef
Updated Branches:
  refs/heads/master 6d4e4012f -> 6f02cb7e6 (forced update)


[REEF-1228] Fix TestDriverConfigGenerator failure on the first test run

This change modifies TestDriverConfigGenerator to extract
reef-bridge-java-<version>-shaded.jar from O.A.R.Client assembly resources
before running tests.

JIRA:
  [REEF-1228](https://issues.apache.org/jira/browse/REEF-1228)

Pull request:
  This closes #869


Project: http://git-wip-us.apache.org/repos/asf/reef/repo
Commit: http://git-wip-us.apache.org/repos/asf/reef/commit/6f02cb7e
Tree: http://git-wip-us.apache.org/repos/asf/reef/tree/6f02cb7e
Diff: http://git-wip-us.apache.org/repos/asf/reef/diff/6f02cb7e

Branch: refs/heads/master
Commit: 6f02cb7e6551af12c590c9734a6521d98010a093
Parents: 273029b
Author: Mariia Mykhailova <ma...@apache.org>
Authored: Tue Mar 1 16:23:45 2016 -0800
Committer: Dongjoon Hyun <do...@apache.org>
Committed: Wed Mar 2 11:42:06 2016 -0800

----------------------------------------------------------------------
 .../Common/DriverFolderPreparationHelper.cs     |  26 +----
 .../Common/ResourceHelper.cs                    |  89 ---------------
 .../Org.Apache.REEF.Client.csproj               |   1 -
 .../Jar/ResourceHelper.cs                       | 111 +++++++++++++++++++
 .../Org.Apache.REEF.Common.csproj               |   1 +
 .../Utility/TestDriverConfigGenerator.cs        |  14 +++
 6 files changed, 131 insertions(+), 111 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/reef/blob/6f02cb7e/lang/cs/Org.Apache.REEF.Client/Common/DriverFolderPreparationHelper.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Client/Common/DriverFolderPreparationHelper.cs b/lang/cs/Org.Apache.REEF.Client/Common/DriverFolderPreparationHelper.cs
index 7c63498..f579ee1 100644
--- a/lang/cs/Org.Apache.REEF.Client/Common/DriverFolderPreparationHelper.cs
+++ b/lang/cs/Org.Apache.REEF.Client/Common/DriverFolderPreparationHelper.cs
@@ -21,6 +21,7 @@ using System.Linq;
 using Org.Apache.REEF.Client.API;
 using Org.Apache.REEF.Common;
 using Org.Apache.REEF.Common.Files;
+using Org.Apache.REEF.Common.Jar;
 using Org.Apache.REEF.Tang.Annotations;
 using Org.Apache.REEF.Tang.Formats;
 using Org.Apache.REEF.Tang.Implementations.Configuration;
@@ -35,8 +36,6 @@ namespace Org.Apache.REEF.Client.Common
     {
         private const string DLLFileNameExtension = ".dll";
         private const string EXEFileNameExtension = ".exe";
-        private const string BridgeExe = "Org.Apache.REEF.Bridge.exe";
-        private const string ClrDriverFullName = "ClrDriverFullName";
         private const string DefaultDriverConfigurationFileContents =
         @"<configuration>" +
         @"  <runtime>" +
@@ -46,21 +45,6 @@ namespace Org.Apache.REEF.Client.Common
         @"  </runtime>" +
         @"</configuration>";
 
-        // We embed certain binaries in client dll.
-        // Following items in tuples refer to resource names in Org.Apache.REEF.Client.dll
-        // The first resource item contains the name of the file 
-        // such as "reef-bridge-java-0.13.0-SNAPSHOT-shaded.jar". The second resource
-        // item contains the byte contents for said file.
-        // Please note that the identifiers below need to be in sync with 2 other files
-        // 1. $(SolutionDir)\Org.Apache.REEF.Client\Properties\Resources.xml
-        // 2. $(SolutionDir)\Org.Apache.REEF.Client\Org.Apache.REEF.Client.csproj
-        private readonly static Tuple<string, string>[] clientFileResources = new Tuple<string, string>[]
-        {
-            new Tuple<string, string>("ClientJarFullName", "reef_bridge_client"),
-            new Tuple<string, string>("DriverJarFullName", "reef_bridge_driver"),
-            new Tuple<string, string>(ClrDriverFullName,    "reef_clrdriver"),
-        };
-
         private static readonly Logger Logger = Logger.GetLogger(typeof(DriverFolderPreparationHelper));
         private readonly AvroConfigurationSerializer _configurationSerializer;
         private readonly REEFFileNames _fileNames;
@@ -135,14 +119,14 @@ namespace Org.Apache.REEF.Client.Common
             Directory.CreateDirectory(Path.Combine(driverFolderPath, _fileNames.GetGlobalFolderPath()));
 
             var resourceHelper = new ResourceHelper(typeof(DriverFolderPreparationHelper).Assembly);
-            foreach (var fileResources in clientFileResources)
+            foreach (var fileResources in ResourceHelper.FileResources)
             {
-                var fileName = resourceHelper.GetString(fileResources.Item1);
-                if (ClrDriverFullName == fileResources.Item1)
+                var fileName = resourceHelper.GetString(fileResources.Key);
+                if (ResourceHelper.ClrDriverFullName == fileResources.Key)
                 {
                     fileName = Path.Combine(driverFolderPath, _fileNames.GetBridgeExePath());
                 }
-                File.WriteAllBytes(fileName, resourceHelper.GetBytes(fileResources.Item2));
+                File.WriteAllBytes(fileName, resourceHelper.GetBytes(fileResources.Value));
             }
             
             var config = DefaultDriverConfigurationFileContents;

http://git-wip-us.apache.org/repos/asf/reef/blob/6f02cb7e/lang/cs/Org.Apache.REEF.Client/Common/ResourceHelper.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Client/Common/ResourceHelper.cs b/lang/cs/Org.Apache.REEF.Client/Common/ResourceHelper.cs
deleted file mode 100644
index 84920fa..0000000
--- a/lang/cs/Org.Apache.REEF.Client/Common/ResourceHelper.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-// 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.
-
-using System;
-using System.Reflection;
-using System.Resources;
-
-namespace Org.Apache.REEF.Client.Common
-{
-    /// <summary>
-    /// Helps with retrieval of embedded resources.
-    /// See Org.Apache.REEF.Client.csproj for embedding resources and use this class to retrieve them.
-    /// </summary>
-    internal class ResourceHelper
-    {
-        private const string CouldNotRetrieveResource = "Could not retrieve resource '{0}'";
-        private readonly ResourceSet _resourceSet;
-
-        /// <summary>
-        /// Given an assembly, returns a ResourceSet for it.
-        /// </summary>
-        /// <param name="assembly"></param>
-        /// <returns>ResourceSet</returns>
-        internal ResourceHelper(Assembly assembly)
-        {
-            var names = assembly.GetManifestResourceNames();
-            if (null == names[0])
-            {
-                throw new ApplicationException("Could not retrieve Assembly Manifest Resource names");
-            }
-            var manifestResources = assembly.GetManifestResourceStream(names[0]);
-            if (null == manifestResources)
-            {
-                throw new ApplicationException("Could not retrieve Assembly Manifest Resource stream");
-            }
-
-            _resourceSet = new ResourceSet(manifestResources);
-        }
-
-        /// <summary>
-        /// Given resource name, returns corresponding resource
-        /// </summary>
-        /// <param name="resourceName"></param>
-        /// <returns>T</returns>
-        internal T GetResource<T>(string resourceName)
-        {
-            var resource = _resourceSet.GetObject(resourceName);
-            if (null == resource)
-            {
-                throw new ApplicationException(string.Format(CouldNotRetrieveResource, resourceName));
-            }
-            return (T)resource;
-        }
-
-        /// <summary>
-        /// Given resource name, returns corresponding resource
-        /// </summary>
-        /// <param name="resourceName"></param>
-        /// <returns>T</returns>
-        internal string GetString(string resourceName)
-        {
-            return GetResource<string>(resourceName);
-        }
-
-        /// <summary>
-        /// Given resource name, returns corresponding resource
-        /// </summary>
-        /// <param name="resourceName"></param>
-        /// <returns>T</returns>
-        internal byte[] GetBytes(string resourceName)
-        {
-            return GetResource<byte[]>(resourceName);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/reef/blob/6f02cb7e/lang/cs/Org.Apache.REEF.Client/Org.Apache.REEF.Client.csproj
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Client/Org.Apache.REEF.Client.csproj b/lang/cs/Org.Apache.REEF.Client/Org.Apache.REEF.Client.csproj
index a492a68..14184c4 100644
--- a/lang/cs/Org.Apache.REEF.Client/Org.Apache.REEF.Client.csproj
+++ b/lang/cs/Org.Apache.REEF.Client/Org.Apache.REEF.Client.csproj
@@ -92,7 +92,6 @@ under the License.
     <Compile Include="Common\JobSubmissionResult.cs" />
     <Compile Include="Common\JavaClientLauncher.cs" />
     <Compile Include="Common\ResourceArchiveFileGenerator.cs" />
-    <Compile Include="Common\ResourceHelper.cs" />
     <Compile Include="Local\LocalClient.cs" />
     <Compile Include="Local\LocalJobSubmissionResult.cs" />
     <Compile Include="Local\LocalRuntimeClientConfiguration.cs" />

http://git-wip-us.apache.org/repos/asf/reef/blob/6f02cb7e/lang/cs/Org.Apache.REEF.Common/Jar/ResourceHelper.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Common/Jar/ResourceHelper.cs b/lang/cs/Org.Apache.REEF.Common/Jar/ResourceHelper.cs
new file mode 100644
index 0000000..e6aafec
--- /dev/null
+++ b/lang/cs/Org.Apache.REEF.Common/Jar/ResourceHelper.cs
@@ -0,0 +1,111 @@
+// 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.
+
+using System;
+using System.Collections.Generic;
+using System.Reflection;
+using System.Resources;
+using Org.Apache.REEF.Utilities.Attributes;
+
+namespace Org.Apache.REEF.Common.Jar
+{
+    /// <summary>
+    /// Helps with retrieval of embedded resources.
+    /// See Org.Apache.REEF.Client.csproj for embedding resources and use this class to retrieve them.
+    /// </summary>
+    [Private]
+    public class ResourceHelper
+    {
+        public const string ClientJarFullName = "ClientJarFullName";
+        public const string DriverJarFullName = "DriverJarFullName";
+        public const string ClrDriverFullName = "ClrDriverFullName";
+
+        // We embed certain binaries in client dll.
+        // Following items in tuples refer to resource names in Org.Apache.REEF.Client.dll
+        // The first resource item contains the name of the file 
+        // such as "reef-bridge-java-<version>-shaded.jar". The second resource
+        // item contains the byte contents for said file.
+        // Please note that the identifiers below need to be in sync with 2 other files
+        // 1. $(SolutionDir)\Org.Apache.REEF.Client\Properties\Resources.xml
+        // 2. $(SolutionDir)\Org.Apache.REEF.Client\Org.Apache.REEF.Client.csproj
+        public readonly static Dictionary<string, string> FileResources = new Dictionary<string, string>
+        {
+            { ClientJarFullName, "reef_bridge_client" },
+            { DriverJarFullName, "reef_bridge_driver" },
+            { ClrDriverFullName, "reef_clrdriver" },
+        };
+
+        private const string CouldNotRetrieveResource = "Could not retrieve resource '{0}'";
+        private readonly ResourceSet _resourceSet;
+
+        /// <summary>
+        /// Given an assembly, returns a ResourceSet for it.
+        /// </summary>
+        /// <param name="assembly"></param>
+        /// <returns>ResourceSet</returns>
+        public ResourceHelper(Assembly assembly)
+        {
+            var names = assembly.GetManifestResourceNames();
+            if (null == names[0])
+            {
+                throw new ApplicationException("Could not retrieve Assembly Manifest Resource names");
+            }
+            var manifestResources = assembly.GetManifestResourceStream(names[0]);
+            if (null == manifestResources)
+            {
+                throw new ApplicationException("Could not retrieve Assembly Manifest Resource stream");
+            }
+
+            _resourceSet = new ResourceSet(manifestResources);
+        }
+
+        /// <summary>
+        /// Given resource name, returns corresponding resource
+        /// </summary>
+        /// <param name="resourceName"></param>
+        /// <returns>T</returns>
+        internal T GetResource<T>(string resourceName)
+        {
+            var resource = _resourceSet.GetObject(resourceName);
+            if (null == resource)
+            {
+                throw new ApplicationException(string.Format(CouldNotRetrieveResource, resourceName));
+            }
+            return (T)resource;
+        }
+
+        /// <summary>
+        /// Given resource name, returns corresponding resource
+        /// </summary>
+        /// <param name="resourceName"></param>
+        /// <returns>T</returns>
+        public string GetString(string resourceName)
+        {
+            return GetResource<string>(resourceName);
+        }
+
+        /// <summary>
+        /// Given resource name, returns corresponding resource
+        /// </summary>
+        /// <param name="resourceName"></param>
+        /// <returns>T</returns>
+        public byte[] GetBytes(string resourceName)
+        {
+            return GetResource<byte[]>(resourceName);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/reef/blob/6f02cb7e/lang/cs/Org.Apache.REEF.Common/Org.Apache.REEF.Common.csproj
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Common/Org.Apache.REEF.Common.csproj b/lang/cs/Org.Apache.REEF.Common/Org.Apache.REEF.Common.csproj
index b5d53cf..dcb0c1f 100644
--- a/lang/cs/Org.Apache.REEF.Common/Org.Apache.REEF.Common.csproj
+++ b/lang/cs/Org.Apache.REEF.Common/Org.Apache.REEF.Common.csproj
@@ -107,6 +107,7 @@ under the License.
     <Compile Include="Io\NamingConfiguration.cs" />
     <Compile Include="Io\NamingConfigurationOptions.cs" />
     <Compile Include="Io\TcpPortConfigurationProvider.cs" />
+    <Compile Include="Jar\ResourceHelper.cs" />
     <Compile Include="ITaskSubmittable.cs" />
     <Compile Include="Client\Parameters\DriverConfigurationProviders.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />

http://git-wip-us.apache.org/repos/asf/reef/blob/6f02cb7e/lang/cs/Org.Apache.REEF.Tests/Utility/TestDriverConfigGenerator.cs
----------------------------------------------------------------------
diff --git a/lang/cs/Org.Apache.REEF.Tests/Utility/TestDriverConfigGenerator.cs b/lang/cs/Org.Apache.REEF.Tests/Utility/TestDriverConfigGenerator.cs
index 6b89232..7d55f41 100644
--- a/lang/cs/Org.Apache.REEF.Tests/Utility/TestDriverConfigGenerator.cs
+++ b/lang/cs/Org.Apache.REEF.Tests/Utility/TestDriverConfigGenerator.cs
@@ -16,13 +16,27 @@
 // under the License.
 
 using System;
+using System.IO;
 using Org.Apache.REEF.Driver;
+using Org.Apache.REEF.Client.Common;
+using Org.Apache.REEF.Common.Jar;
 using Xunit;
 
 namespace Org.Apache.REEF.Tests.Utility
 {
     public class TestDriverConfigGenerator
     {
+        public TestDriverConfigGenerator()
+        {
+            var resourceHelper = new ResourceHelper(typeof(IJobSubmissionResult).Assembly);
+            var fileName = resourceHelper.GetString(ResourceHelper.DriverJarFullName);
+            if (!File.Exists(fileName))
+            {
+                File.WriteAllBytes(fileName, 
+                    resourceHelper.GetBytes(ResourceHelper.FileResources[ResourceHelper.DriverJarFullName]));
+            }
+        }
+
         [Fact]
         public void TestGeneratingFullDriverConfigFile()
         {