http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/05766f9d/lang/cs/Org.Apache.REEF.Tests/Functional/ReefFunctionalTest.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Tests/Functional/ReefFunctionalTest.cs b/lang/cs/Org.Apache.REEF.Tests/Functional/ReefFunctionalTest.cs new file mode 100644 index 0000000..deef323 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Tests/Functional/ReefFunctionalTest.cs @@ -0,0 +1,200 @@ +/** + * 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.Globalization; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using System.Timers; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Microsoft.WindowsAzure.Storage; +using Microsoft.WindowsAzure.Storage.Blob; +using Org.Apache.REEF.Driver; +using Org.Apache.REEF.Driver.bridge; +using Org.Apache.REEF.Tang.Interface; +using Org.Apache.REEF.Utilities; +using Org.Apache.REEF.Utilities.Logging; +using Timer = System.Timers.Timer; + +namespace Org.Apache.REEF.Tests.Functional +{ + public class ReefFunctionalTest + { + protected const string _stdout = "driver.stdout"; + protected const string _stderr = "driver.stderr"; + protected const string _cmdFile = "run.cmd"; + protected const string _binFolder = "bin"; + // TODO: we will need a proper way to hide this when we are OSS'ed + protected const string _blobStorageConnectionString = + @"DefaultEndpointsProtocol=https;AccountName=reeftestlog;AccountKey=cuUmPRF9DiG56bciNc37O/SfHAoh1jFfJW6AsXAtWLPnjlOzXJGWgXhkyDFOGEHIMscqDU41ElUKnjcsJjWD9w=="; + + private bool _testSuccess = false; + private bool _onLocalRuntime = false; + private string _className = Constants.BridgeLaunchClass; + private string _clrFolder = "."; + private string _reefJar = Path.Combine(_binFolder, Constants.BridgeJarFileName); + private string _runCommand = Path.Combine(_binFolder, _cmdFile); + + // TODO: once things stablize, we would like to toggle this to be false and only enable when needed for debugging test failures. + private bool _enableRealtimeLogUpload = true; + + protected string TestId { get; set; } + + protected Timer TestTimer { get; set; } + + protected Task TimerTask { get; set; } + + protected bool TestSuccess + { + get { return _testSuccess; } + set { _testSuccess = value; } + } + + protected bool IsOnLocalRuntiime + { + get { return _onLocalRuntime; } + set { _onLocalRuntime = value; } + } + + public void Init() + { + TestId = Guid.NewGuid().ToString("N").Substring(0, 8); + Console.WriteLine("Running test " + TestId + ". If failed AND log uploaded is enabled, log can be find in " + Path.Combine(DateTime.Now.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), TestId)); + if (_enableRealtimeLogUpload) + { + TimerTask = new Task(() => + { + TestTimer = new Timer() + { + Interval = 1000, + Enabled = true, + AutoReset = true + }; + TestTimer.Elapsed += PeriodicUploadLog; + TestTimer.Start(); + }); + TimerTask.Start(); + } + + ValidationUtilities.ValidateEnvVariable("JAVA_HOME"); + + if (!Directory.Exists(_binFolder)) + { + throw new InvalidOperationException(_binFolder + " not found in current directory, cannot init test"); + } + } + + protected void TestRun(HashSet<string> appDlls, IConfiguration driverBridgeConfig, bool runOnYarn = false, JavaLoggingSetting javaLogSettings = JavaLoggingSetting.INFO) + { + ClrClientHelper.Run(appDlls, driverBridgeConfig, new DriverSubmissionSettings() { RunOnYarn = runOnYarn, JavaLogLevel = javaLogSettings }, _reefJar, _runCommand, _clrFolder, _className); + } + + protected void CleanUp() + { + Console.WriteLine("Cleaning up test."); + + if (TimerTask != null) + { + TestTimer.Stop(); + TimerTask.Dispose(); + TimerTask = null; + } + + // Wait for file upload task to complete + Thread.Sleep(500); + + string dir = Path.Combine(Directory.GetCurrentDirectory(), "REEF_LOCAL_RUNTIME"); + try + { + if (Directory.Exists(dir)) + { + Directory.Delete(dir, true); + } + } + catch (IOException) + { + // do not fail if clean up is unsuccessful + } + } + + protected void ValidateSuccessForLocalRuntime(int numberOfEvaluatorsToClose) + { + const string successIndication = "EXIT: ActiveContextClr2Java::Close"; + const string failedTaskIndication = "Java_com_microsoft_reef_javabridge_NativeInterop_ClrSystemFailedTaskHandlerOnNext"; + const string failedEvaluatorIndication = "Java_com_microsoft_reef_javabridge_NativeInterop_ClrSystemFailedEvaluatorHandlerOnNext"; + string[] lines = File.ReadAllLines(GetLogFile(_stdout)); + string[] successIndicators = lines.Where(s => s.Contains(successIndication)).ToArray(); + string[] failedTaskIndicators = lines.Where(s => s.Contains(failedTaskIndication)).ToArray(); + string[] failedIndicators = lines.Where(s => s.Contains(failedEvaluatorIndication)).ToArray(); + Assert.IsTrue(successIndicators.Count() == numberOfEvaluatorsToClose); + Assert.IsFalse(failedTaskIndicators.Any()); + Assert.IsFalse(failedIndicators.Any()); + } + + protected void PeriodicUploadLog(object source, ElapsedEventArgs e) + { + try + { + UploadDriverLog(); + } + catch (Exception) + { + // log not available yet, ignore it + } + } + + protected string GetLogFile(string logFileName) + { + string driverContainerDirectory = Directory.GetDirectories(Path.Combine(Directory.GetCurrentDirectory(), "REEF_LOCAL_RUNTIME"), "driver", SearchOption.AllDirectories).SingleOrDefault(); + if (string.IsNullOrWhiteSpace(driverContainerDirectory)) + { + throw new InvalidOperationException("Cannot find driver container directory"); + } + string logFile = Path.Combine(driverContainerDirectory, logFileName); + if (!File.Exists(logFile)) + { + throw new InvalidOperationException("Driver stdout file not found"); + } + return logFile; + } + + private void UploadDriverLog() + { + string driverStdout = GetLogFile(_stdout); + string driverStderr = GetLogFile(_stderr); + CloudStorageAccount storageAccount = CloudStorageAccount.Parse(_blobStorageConnectionString); + CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); + CloudBlobContainer container = blobClient.GetContainerReference(DateTime.Now.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)); + container.CreateIfNotExists(); + + CloudBlockBlob blob = container.GetBlockBlobReference(Path.Combine(TestId, "driverStdOut")); + FileStream fs = new FileStream(driverStdout, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + blob.UploadFromStream(fs); + fs.Close(); + + blob = container.GetBlockBlobReference(Path.Combine(TestId, "driverStdErr")); + fs = new FileStream(driverStderr, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + blob.UploadFromStream(fs); + fs.Close(); + } + } +} \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/05766f9d/lang/cs/Org.Apache.REEF.Tests/Network/BlockingCollectionExtensionTests.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Tests/Network/BlockingCollectionExtensionTests.cs b/lang/cs/Org.Apache.REEF.Tests/Network/BlockingCollectionExtensionTests.cs new file mode 100644 index 0000000..1737888 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Tests/Network/BlockingCollectionExtensionTests.cs @@ -0,0 +1,74 @@ +/** + * 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.Concurrent; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Org.Apache.REEF.Network.Utilities; + +namespace Org.Apache.REEF.Tests.Network +{ + [TestClass] + public class BlockingCollectionExtensionTests + { + [TestMethod] + public void TestCollectionContainsElement() + { + string item = "abc"; + BlockingCollection<string> collection = new BlockingCollection<string>(); + collection.Add(item); + + Assert.AreEqual(item, collection.Take(item)); + + // Check that item is no longer in collection + Assert.AreEqual(0, collection.Count); + } + + [TestMethod] + public void TestCollectionContainsElement2() + { + string item = "abc"; + BlockingCollection<string> collection = new BlockingCollection<string>(); + collection.Add("cat"); + collection.Add(item); + collection.Add("dog"); + + Assert.AreEqual(item, collection.Take(item)); + + // Remove remaining items, check that item is not there + Assert.AreNotEqual(item, collection.Take()); + Assert.AreNotEqual(item, collection.Take()); + Assert.AreEqual(0, collection.Count); + } + + [TestMethod] + [ExpectedException(typeof(InvalidOperationException))] + public void TestCollectionDoesNotContainsElement() + { + string item1 = "abc"; + string item2 = "def"; + + BlockingCollection<string> collection = new BlockingCollection<string>(); + collection.Add(item2); + + // Should throw InvalidOperationException since item1 is not in collection + collection.Take(item1); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/05766f9d/lang/cs/Org.Apache.REEF.Tests/Network/NameServerTests.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Tests/Network/NameServerTests.cs b/lang/cs/Org.Apache.REEF.Tests/Network/NameServerTests.cs new file mode 100644 index 0000000..d6e64f8 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Tests/Network/NameServerTests.cs @@ -0,0 +1,269 @@ +/** + * 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.Net; +using System.Threading; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Org.Apache.REEF.Common.io; +using Org.Apache.REEF.Network.Naming; +using Org.Apache.REEF.Tang.Annotations; +using Org.Apache.REEF.Tang.Implementations.Tang; +using Org.Apache.REEF.Tang.Interface; +using Org.Apache.REEF.Tang.Util; + +namespace Org.Apache.REEF.Tests.Network +{ + [TestClass] + public class NameServerTests + { + [TestMethod] + public void TestNameServerNoRequests() + { + using (var server = new NameServer(0)) + { + } + } + + [TestMethod] + public void TestNameServerNoRequestsTwoClients() + { + using (var server = new NameServer(0)) + { + var nameClient = new NameClient(server.LocalEndpoint); + var nameClient2 = new NameClient(server.LocalEndpoint); + nameClient2.Register("1", new IPEndPoint(IPAddress.Any, 8080)); + nameClient.Lookup("1"); + } + } + + [TestMethod] + public void TestNameServerNoRequestsTwoClients2() + { + using (var server = new NameServer(0)) + { + var nameClient = new NameClient(server.LocalEndpoint); + var nameClient2 = new NameClient(server.LocalEndpoint); + nameClient2.Register("1", new IPEndPoint(IPAddress.Any, 8080)); + nameClient.Lookup("1"); + } + } + + [TestMethod] + public void TestNameServerMultipleRequestsTwoClients() + { + using (var server = new NameServer(0)) + { + var nameClient = new NameClient(server.LocalEndpoint); + var nameClient2 = new NameClient(server.LocalEndpoint); + nameClient.Register("1", new IPEndPoint(IPAddress.Any, 8080)); + nameClient2.Lookup("1"); + } + } + + [TestMethod] + public void TestRegister() + { + using (INameServer server = BuildNameServer()) + { + using (INameClient client = BuildNameClient(server.LocalEndpoint)) + { + IPEndPoint endpoint1 = new IPEndPoint(IPAddress.Parse("100.0.0.1"), 100); + IPEndPoint endpoint2 = new IPEndPoint(IPAddress.Parse("100.0.0.2"), 200); + IPEndPoint endpoint3 = new IPEndPoint(IPAddress.Parse("100.0.0.3"), 300); + + // Check that no endpoints have been registered + Assert.IsNull(client.Lookup("a")); + Assert.IsNull(client.Lookup("b")); + Assert.IsNull(client.Lookup("c")); + + // Register endpoints + client.Register("a", endpoint1); + client.Register("b", endpoint2); + client.Register("c", endpoint3); + + // Check that they can be looked up correctly + Assert.AreEqual(endpoint1, client.Lookup("a")); + Assert.AreEqual(endpoint2, client.Lookup("b")); + Assert.AreEqual(endpoint3, client.Lookup("c")); + } + } + } + + [TestMethod] + public void TestUnregister() + { + using (INameServer server = BuildNameServer()) + { + using (INameClient client = BuildNameClient(server.LocalEndpoint)) + { + IPEndPoint endpoint1 = new IPEndPoint(IPAddress.Parse("100.0.0.1"), 100); + + // Register endpoint + client.Register("a", endpoint1); + + // Check that it can be looked up correctly + Assert.AreEqual(endpoint1, client.Lookup("a")); + + // Unregister endpoints + client.Unregister("a"); + Thread.Sleep(1000); + + // Make sure they were unregistered correctly + Assert.IsNull(client.Lookup("a")); + } + } + } + + [TestMethod] + public void TestLookup() + { + using (INameServer server = BuildNameServer()) + { + using (INameClient client = BuildNameClient(server.LocalEndpoint)) + { + IPEndPoint endpoint1 = new IPEndPoint(IPAddress.Parse("100.0.0.1"), 100); + IPEndPoint endpoint2 = new IPEndPoint(IPAddress.Parse("100.0.0.2"), 200); + + // Register endpoint1 + client.Register("a", endpoint1); + Assert.AreEqual(endpoint1, client.Lookup("a")); + + // Reregister identifer a + client.Register("a", endpoint2); + Assert.AreEqual(endpoint2, client.Lookup("a")); + } + } + } + + [TestMethod] + public void TestLookupList() + { + using (INameServer server = BuildNameServer()) + { + using (INameClient client = BuildNameClient(server.LocalEndpoint)) + { + IPEndPoint endpoint1 = new IPEndPoint(IPAddress.Parse("100.0.0.1"), 100); + IPEndPoint endpoint2 = new IPEndPoint(IPAddress.Parse("100.0.0.2"), 200); + IPEndPoint endpoint3 = new IPEndPoint(IPAddress.Parse("100.0.0.3"), 300); + + // Register endpoints + client.Register("a", endpoint1); + client.Register("b", endpoint2); + client.Register("c", endpoint3); + + // Look up both at the same time + List<string> ids = new List<string> { "a", "b", "c", "d" }; + List<NameAssignment> assignments = client.Lookup(ids); + + // Check that a, b, and c are registered + Assert.AreEqual("a", assignments[0].Identifier); + Assert.AreEqual(endpoint1, assignments[0].Endpoint); + Assert.AreEqual("b", assignments[1].Identifier); + Assert.AreEqual(endpoint2, assignments[1].Endpoint); + Assert.AreEqual("c", assignments[2].Identifier); + Assert.AreEqual(endpoint3, assignments[2].Endpoint); + + // Check that d is not registered + Assert.AreEqual(3, assignments.Count); + } + } + } + + [TestMethod] + public void TestNameClientRestart() + { + int oldPort = 6666; + int newPort = 6662; + INameServer server = new NameServer(oldPort); + + using (INameClient client = BuildNameClient(server.LocalEndpoint)) + { + IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse("100.0.0.1"), 100); + + client.Register("a", endpoint); + Assert.AreEqual(endpoint, client.Lookup("a")); + + server.Dispose(); + + server = new NameServer(newPort); + client.Restart(server.LocalEndpoint); + + client.Register("b", endpoint); + Assert.AreEqual(endpoint, client.Lookup("b")); + + server.Dispose(); + } + } + + [TestMethod] + public void TestConstructorInjection() + { + int port = 6666; + using (INameServer server = new NameServer(port)) + { + IConfiguration nameClientConfiguration = NamingConfiguration.ConfigurationModule + .Set(NamingConfiguration.NameServerAddress, server.LocalEndpoint.Address.ToString()) + .Set(NamingConfiguration.NameServerPort, port + string.Empty) + .Build(); + + ConstructorInjection c = TangFactory.GetTang() + .NewInjector(nameClientConfiguration) + .GetInstance<ConstructorInjection>(); + + Assert.IsNotNull(c); + } + } + + private INameServer BuildNameServer() + { + var builder = TangFactory.GetTang() + .NewConfigurationBuilder() + .BindNamedParameter<NamingConfigurationOptions.NameServerPort, int>( + GenericType<NamingConfigurationOptions.NameServerPort>.Class, "0"); + + return TangFactory.GetTang().NewInjector(builder.Build()).GetInstance<INameServer>(); + } + + private INameClient BuildNameClient(IPEndPoint remoteEndpoint) + { + string nameServerAddr = remoteEndpoint.Address.ToString(); + int nameServerPort = remoteEndpoint.Port; + IConfiguration nameClientConfiguration = NamingConfiguration.ConfigurationModule + .Set(NamingConfiguration.NameServerAddress, nameServerAddr) + .Set(NamingConfiguration.NameServerPort, nameServerPort + string.Empty) + .Build(); + + return TangFactory.GetTang().NewInjector(nameClientConfiguration).GetInstance<NameClient>(); + } + + private class ConstructorInjection + { + [Inject] + public ConstructorInjection(NameClient client) + { + if (client == null) + { + throw new ArgumentNullException("client"); + } + } + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/05766f9d/lang/cs/Org.Apache.REEF.Tests/Network/NetworkServiceTests.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Tests/Network/NetworkServiceTests.cs b/lang/cs/Org.Apache.REEF.Tests/Network/NetworkServiceTests.cs new file mode 100644 index 0000000..9b94ee3 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Tests/Network/NetworkServiceTests.cs @@ -0,0 +1,198 @@ +/** + * 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.Concurrent; +using System.Globalization; +using System.Linq; +using System.Net; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Org.Apache.REEF.Common.io; +using Org.Apache.REEF.Network.Naming; +using Org.Apache.REEF.Network.NetworkService; +using Org.Apache.REEF.Tang.Annotations; +using Org.Apache.REEF.Tang.Implementations.Tang; +using Org.Apache.REEF.Tang.Util; +using Org.Apache.REEF.Wake; +using Org.Apache.REEF.Wake.Remote; +using Org.Apache.REEF.Wake.Remote.Impl; +using Org.Apache.REEF.Wake.Util; + +namespace Org.Apache.REEF.Tests.Network +{ + [TestClass] + public class NetworkServiceTests + { + [TestMethod] + public void TestNetworkServiceOneWayCommunication() + { + int networkServicePort1 = NetworkUtils.GenerateRandomPort(6000, 7000); + int networkServicePort2 = NetworkUtils.GenerateRandomPort(7001, 8000); + + BlockingCollection<string> queue = new BlockingCollection<string>(); + + using (INameServer nameServer = new NameServer(0)) + { + IPEndPoint endpoint = nameServer.LocalEndpoint; + int nameServerPort = endpoint.Port; + string nameServerAddr = endpoint.Address.ToString(); + using (INetworkService<string> networkService1 = BuildNetworkService(networkServicePort1, nameServerPort, nameServerAddr, null)) + using (INetworkService<string> networkService2 = BuildNetworkService(networkServicePort2, nameServerPort, nameServerAddr, new MessageHandler(queue))) + { + IIdentifier id1 = new StringIdentifier("service1"); + IIdentifier id2 = new StringIdentifier("service2"); + networkService1.Register(id1); + networkService2.Register(id2); + + using (IConnection<string> connection = networkService1.NewConnection(id2)) + { + connection.Open(); + connection.Write("abc"); + connection.Write("def"); + connection.Write("ghi"); + + Assert.AreEqual("abc", queue.Take()); + Assert.AreEqual("def", queue.Take()); + Assert.AreEqual("ghi", queue.Take()); + } + } + } + } + + [TestMethod] + public void TestNetworkServiceTwoWayCommunication() + { + int networkServicePort1 = NetworkUtils.GenerateRandomPort(6000, 7000); + int networkServicePort2 = NetworkUtils.GenerateRandomPort(7001, 8000); + + BlockingCollection<string> queue1 = new BlockingCollection<string>(); + BlockingCollection<string> queue2 = new BlockingCollection<string>(); + + using (INameServer nameServer = new NameServer(0)) + { + IPEndPoint endpoint = nameServer.LocalEndpoint; + int nameServerPort = endpoint.Port; + string nameServerAddr = endpoint.Address.ToString(); + using (INetworkService<string> networkService1 = BuildNetworkService(networkServicePort1, nameServerPort, nameServerAddr, new MessageHandler(queue1))) + using (INetworkService<string> networkService2 = BuildNetworkService(networkServicePort2, nameServerPort, nameServerAddr, new MessageHandler(queue2))) + { + IIdentifier id1 = new StringIdentifier("service1"); + IIdentifier id2 = new StringIdentifier("service2"); + networkService1.Register(id1); + networkService2.Register(id2); + + using (IConnection<string> connection1 = networkService1.NewConnection(id2)) + using (IConnection<string> connection2 = networkService2.NewConnection(id1)) + { + connection1.Open(); + connection1.Write("abc"); + connection1.Write("def"); + connection1.Write("ghi"); + + connection2.Open(); + connection2.Write("jkl"); + connection2.Write("mno"); + + Assert.AreEqual("abc", queue2.Take()); + Assert.AreEqual("def", queue2.Take()); + Assert.AreEqual("ghi", queue2.Take()); + + Assert.AreEqual("jkl", queue1.Take()); + Assert.AreEqual("mno", queue1.Take()); + } + } + } + } + + private INetworkService<string> BuildNetworkService( + int networkServicePort, + int nameServicePort, + string nameServiceAddr, + IObserver<NsMessage<string>> handler) + { + // Test injection + if (handler == null) + { + var networkServiceConf = TangFactory.GetTang().NewConfigurationBuilder() + .BindNamedParameter<NetworkServiceOptions.NetworkServicePort, int>( + GenericType<NetworkServiceOptions.NetworkServicePort>.Class, + networkServicePort.ToString(CultureInfo.CurrentCulture)) + .BindNamedParameter<NamingConfigurationOptions.NameServerPort, int>( + GenericType<NamingConfigurationOptions.NameServerPort>.Class, + nameServicePort.ToString(CultureInfo.CurrentCulture)) + .BindNamedParameter<NamingConfigurationOptions.NameServerAddress, string>( + GenericType<NamingConfigurationOptions.NameServerAddress>.Class, + nameServiceAddr) + .BindImplementation(GenericType<ICodec<string>>.Class, GenericType<StringCodec>.Class) + .BindImplementation(GenericType<IObserver<NsMessage<string>>>.Class, GenericType<NetworkMessageHandler>.Class) + .Build(); + + return TangFactory.GetTang().NewInjector(networkServiceConf).GetInstance<NetworkService<string>>(); + } + + return new NetworkService<string>(networkServicePort, nameServiceAddr, nameServicePort, + handler, new StringIdentifierFactory(), new StringCodec()); + } + + private class MessageHandler : IObserver<NsMessage<string>> + { + private BlockingCollection<string> _queue; + + public MessageHandler(BlockingCollection<string> queue) + { + _queue = queue; + } + + public void OnNext(NsMessage<string> value) + { + _queue.Add(value.Data.First()); + } + + public void OnError(Exception error) + { + throw new NotImplementedException(); + } + + public void OnCompleted() + { + throw new NotImplementedException(); + } + } + + private class NetworkMessageHandler : IObserver<NsMessage<string>> + { + [Inject] + public NetworkMessageHandler() + { + } + + public void OnNext(NsMessage<string> value) + { + } + + public void OnError(Exception error) + { + } + + public void OnCompleted() + { + } + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/05766f9d/lang/cs/Org.Apache.REEF.Tests/Org.Apache.REEF.Tests.csproj ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Tests/Org.Apache.REEF.Tests.csproj b/lang/cs/Org.Apache.REEF.Tests/Org.Apache.REEF.Tests.csproj new file mode 100644 index 0000000..83fc29b --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Tests/Org.Apache.REEF.Tests.csproj @@ -0,0 +1,213 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +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. +--> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProjectGuid>{988F90CF-A48D-4938-A4D2-FA3B758FB5A7}</ProjectGuid> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>Org.Apache.REEF.Tests</RootNamespace> + <AssemblyName>Org.Apache.REEF.Tests</AssemblyName> + <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> + <FileAlignment>512</FileAlignment> + <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir> + <RestorePackages>true</RestorePackages> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <PlatformTarget>AnyCPU</PlatformTarget> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>..\bin\$(Platform)\$(Configuration)\$(RootNamespace)</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' "> + <PlatformTarget>AnyCPU</PlatformTarget> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>..\bin\$(Platform)\$(Configuration)\$(RootNamespace)</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <PlatformTarget>AnyCPU</PlatformTarget> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>..\bin\$(Platform)\$(Configuration)\$(RootNamespace)</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' "> + <PlatformTarget>AnyCPU</PlatformTarget> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>..\bin\$(Platform)\$(Configuration)\$(RootNamespace)</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <ItemGroup> + <Reference Include="Microsoft.Data.Edm, Version=5.6.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Microsoft.Data.Edm.5.6.3\lib\net40\Microsoft.Data.Edm.dll</HintPath> + </Reference> + <Reference Include="Microsoft.Data.OData, Version=5.6.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Microsoft.Data.OData.5.6.3\lib\net40\Microsoft.Data.OData.dll</HintPath> + </Reference> + <Reference Include="Microsoft.Data.Services.Client, Version=5.6.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\Microsoft.Data.Services.Client.5.6.3\lib\net40\Microsoft.Data.Services.Client.dll</HintPath> + </Reference> + <Reference Include="Microsoft.Hadoop.Avro"> + <HintPath>..\packages\Microsoft.Hadoop.Avro.1.4.0.0\lib\net40\Microsoft.Hadoop.Avro.dll</HintPath> + </Reference> + <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" /> + <Reference Include="Microsoft.WindowsAzure.Configuration"> + <HintPath>..\packages\Microsoft.WindowsAzure.ConfigurationManager.2.0.3\lib\net40\Microsoft.WindowsAzure.Configuration.dll</HintPath> + </Reference> + <Reference Include="Microsoft.WindowsAzure.Storage"> + <HintPath>..\packages\WindowsAzure.Storage.4.3.0\lib\net40\Microsoft.WindowsAzure.Storage.dll</HintPath> + </Reference> + <Reference Include="Newtonsoft.Json"> + <HintPath>..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll</HintPath> + </Reference> + <Reference Include="protobuf-net"> + <HintPath>..\packages\protobuf-net.2.0.0.668\lib\net40\protobuf-net.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.Core" /> + <Reference Include="System.Reactive.Core"> + <HintPath>..\packages\Rx-Core.2.2.5\lib\net45\System.Reactive.Core.dll</HintPath> + </Reference> + <Reference Include="System.Reactive.Interfaces"> + <HintPath>..\packages\Rx-Interfaces.2.2.5\lib\net45\System.Reactive.Interfaces.dll</HintPath> + </Reference> + <Reference Include="System.Spatial, Version=5.6.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\System.Spatial.5.6.3\lib\net40\System.Spatial.dll</HintPath> + </Reference> + <Reference Include="System.Xml.Linq" /> + <Reference Include="System.Data.DataSetExtensions" /> + <Reference Include="Microsoft.CSharp" /> + <Reference Include="System.Data" /> + <Reference Include="System.Xml" /> + </ItemGroup> + <ItemGroup> + <Compile Include="Evaluator\EvaluatorConfigurationsTests.cs" /> + <Compile Include="Evaluator\EvaluatorTests.cs" /> + <Compile Include="Functional\Bridge\TestBridgeClient.cs" /> + <Compile Include="Functional\Bridge\TestHelloBridgeHandlers.cs" /> + <Compile Include="Functional\Bridge\TestSimpleEventHandlers.cs" /> + <Compile Include="Functional\Driver\DriverTestStartHandler.cs" /> + <Compile Include="Functional\Driver\TestDriver.cs" /> + <Compile Include="Functional\Messaging\MessageDriver.cs" /> + <Compile Include="Functional\Messaging\MessageTask.cs" /> + <Compile Include="Functional\Messaging\TestTaskMessage.cs" /> + <Compile Include="Functional\ReefFunctionalTest.cs" /> + <Compile Include="Network\BlockingCollectionExtensionTests.cs" /> + <Compile Include="Network\NameServerTests.cs" /> + <Compile Include="Network\NetworkServiceTests.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="Utility\TestDriverConfigGenerator.cs" /> + <Compile Include="Utility\TestExceptions.cs" /> + </ItemGroup> + <ItemGroup> + <None Include="bin\run.cmd"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </None> + <None Include="ConfigFiles\evaluator.conf"> + <CopyToOutputDirectory>Always</CopyToOutputDirectory> + </None> + <None Include="packages.config" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\Org.Apache.REEF.Client\Org.Apache.REEF.Client.csproj"> + <Project>{5094c35b-4fdb-4322-ac05-45d684501cbf}</Project> + <Name>Org.Apache.REEF.Client</Name> + </ProjectReference> + <ProjectReference Include="..\Org.Apache.REEF.Common\Org.Apache.REEF.Common.csproj"> + <Project>{545a0582-4105-44ce-b99c-b1379514a630}</Project> + <Name>Org.Apache.REEF.Common</Name> + </ProjectReference> + <ProjectReference Include="..\Org.Apache.REEF.Driver\Org.Apache.REEF.Driver.csproj"> + <Project>{a6baa2a7-f52f-4329-884e-1bcf711d6805}</Project> + <Name>Org.Apache.REEF.Driver</Name> + </ProjectReference> + <ProjectReference Include="..\Org.Apache.REEF.Evaluator\Org.Apache.REEF.Evaluator.csproj"> + <Project>{1b983182-9c30-464c-948d-f87eb93a8240}</Project> + <Name>Org.Apache.REEF.Evaluator</Name> + </ProjectReference> + <ProjectReference Include="..\Org.Apache.REEF.Examples.HelloCLRBridge\Org.Apache.REEF.Examples.HelloCLRBridge.csproj"> + <Project>{a78dd8e8-31d0-4506-8738-daa9da86d55b}</Project> + <Name>Org.Apache.REEF.Examples.HelloCLRBridge</Name> + </ProjectReference> + <ProjectReference Include="..\Org.Apache.REEF.Examples.RetainedEvalCLRBridge\Org.Apache.REEF.Examples.RetainedEvalCLRBridge.csproj"> + <Project>{05ec65cf-848d-49ab-9e67-57c14ea63044}</Project> + <Name>Org.Apache.REEF.Examples.RetainedEvalCLRBridge</Name> + </ProjectReference> + <ProjectReference Include="..\Org.Apache.REEF.Examples.Tasks\Org.Apache.REEF.Examples.Tasks.csproj"> + <Project>{75503f90-7b82-4762-9997-94b5c68f15db}</Project> + <Name>Org.Apache.REEF.Examples.Tasks</Name> + </ProjectReference> + <ProjectReference Include="..\Org.Apache.REEF.Network\Org.Apache.REEF.Network.csproj"> + <Project>{883ce800-6a6a-4e0a-b7fe-c054f4f2c1dc}</Project> + <Name>Org.Apache.REEF.Network</Name> + </ProjectReference> + <ProjectReference Include="..\Org.Apache.REEF.Tang\Org.Apache.REEF.Tang.csproj"> + <Project>{97dbb573-3994-417a-9f69-ffa25f00d2a6}</Project> + <Name>Org.Apache.REEF.Tang</Name> + </ProjectReference> + <ProjectReference Include="..\Org.Apache.REEF.Utilities\Org.Apache.REEF.Utilities.csproj"> + <Project>{79e7f89a-1dfb-45e1-8d43-d71a954aeb98}</Project> + <Name>Org.Apache.REEF.Utilities</Name> + </ProjectReference> + <ProjectReference Include="..\Org.Apache.REEF.Wake\Org.Apache.REEF.Wake.csproj"> + <Project>{cdfb3464-4041-42b1-9271-83af24cd5008}</Project> + <Name>Org.Apache.REEF.Wake</Name> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <Content Include="bin\reef-bridge-0.11.0-incubating-SNAPSHOT-shaded.jar"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </Content> + </ItemGroup> + <ItemGroup> + <Folder Include="bin\Debug\" /> + <Folder Include="bin\Release\" /> + </ItemGroup> + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> + <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> +</Project> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/05766f9d/lang/cs/Org.Apache.REEF.Tests/Properties/AssemblyInfo.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Tests/Properties/AssemblyInfo.cs b/lang/cs/Org.Apache.REEF.Tests/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..ab783f0 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Tests/Properties/AssemblyInfo.cs @@ -0,0 +1,55 @@ +/** + * 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.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Org.Apache.REEF.Tests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Org.Apache.REEF.Tests")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("19ebceb4-3b1f-466b-9127-aa14e636d723")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/05766f9d/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 new file mode 100644 index 0000000..f3eac66 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Tests/Utility/TestDriverConfigGenerator.cs @@ -0,0 +1,101 @@ +/** + * 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 Microsoft.VisualStudio.TestTools.UnitTesting; +using Org.Apache.REEF.Driver; + +namespace Org.Apache.REEF.Tests.Utility +{ + [TestClass] + public class TestDriverConfigGenerator + { + [TestMethod] + public void TestGeneratingFullDriverConfigFile() + { + DriverConfigurationSettings driverSubmissionSettings = new DriverConfigurationSettings() + { + DriverMemory = 1024, + DriverIdentifier = "juliaDriverId", + SubmissionDirectory = "reefClrBridgeTmp/job_" + Guid.NewGuid().ToString("N").Substring(0, 8), + IncludingHttpServer = true, + IncludingNameServer = true, + //ClrFolder = "C:\\Reef\\ReefApache\\incubator-reef\\reef-bridge-project\\reef-bridge\\dotnetHello", + ClrFolder = ".", + JarFileFolder = ".\\bin\\" + }; + + DriverConfigGenerator.DriverConfigurationBuilder(driverSubmissionSettings); + } + + [TestMethod] + public void TestGeneratingDriverConfigFileWithoutHttp() + { + DriverConfigurationSettings driverSubmissionSettings = new DriverConfigurationSettings() + { + DriverMemory = 1024, + DriverIdentifier = "juliaDriverId", + SubmissionDirectory = "reefClrBridgeTmp/job_" + Guid.NewGuid().ToString("N").Substring(0, 8), + IncludingHttpServer = false, + IncludingNameServer = true, +// ClrFolder = "C:\\Reef\\ReefApache\\incubator-reef\\reef-bridge-project\\reef-bridge\\dotnetHello", + ClrFolder = ".", + JarFileFolder = ".\\bin\\" + }; + + DriverConfigGenerator.DriverConfigurationBuilder(driverSubmissionSettings); + } + + [TestMethod] + public void TestGeneratingDriverConfigFileWithoutNameServer() + { + DriverConfigurationSettings driverSubmissionSettings = new DriverConfigurationSettings() + { + DriverMemory = 1024, + DriverIdentifier = "juliaDriverId", + SubmissionDirectory = "reefClrBridgeTmp/job_" + Guid.NewGuid().ToString("N").Substring(0, 8), + IncludingHttpServer = true, + IncludingNameServer = false, + //ClrFolder = "C:\\Reef\\ReefApache\\incubator-reef\\reef-bridge-project\\reef-bridge\\dotnetHello", + ClrFolder = ".", + JarFileFolder = ".\\bin\\" + }; + + DriverConfigGenerator.DriverConfigurationBuilder(driverSubmissionSettings); + } + + [TestMethod] + public void TestGeneratingDriverConfigFileDriverOnly() + { + DriverConfigurationSettings driverSubmissionSettings = new DriverConfigurationSettings() + { + DriverMemory = 1024, + DriverIdentifier = "juliaDriverId", + SubmissionDirectory = "reefClrBridgeTmp/job_" + Guid.NewGuid().ToString("N").Substring(0, 8), + IncludingHttpServer = false, + IncludingNameServer = false, + //ClrFolder = "C:\\Reef\\ReefApache\\incubator-reef\\reef-bridge-project\\reef-bridge\\dotnetHello", + ClrFolder = ".", + JarFileFolder = ".\\bin\\" + }; + + DriverConfigGenerator.DriverConfigurationBuilder(driverSubmissionSettings); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/05766f9d/lang/cs/Org.Apache.REEF.Tests/Utility/TestExceptions.cs ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Tests/Utility/TestExceptions.cs b/lang/cs/Org.Apache.REEF.Tests/Utility/TestExceptions.cs new file mode 100644 index 0000000..db22873 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Tests/Utility/TestExceptions.cs @@ -0,0 +1,49 @@ +/** + * 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 Microsoft.VisualStudio.TestTools.UnitTesting; +using Org.Apache.REEF.Utilities.Diagnostics; +using Org.Apache.REEF.Utilities.Logging; + +namespace Org.Apache.REEF.Tests.Utility +{ + [TestClass] + public class TestExceptions + { + private static readonly Logger LOGGER = Logger.GetLogger(typeof(TestExceptions)); + + [TestMethod] + public void TestThrowCaught() + { + string msg = null; + try + { + Exceptions.Throw(new ApplicationException("test"), LOGGER); + msg = "not supposed to reach here"; + Assert.Fail(msg); + } + catch (ApplicationException e) + { + Exceptions.Caught(e, Level.Info, LOGGER); + } + Assert.IsNull(msg); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/05766f9d/lang/cs/Org.Apache.REEF.Tests/bin/reef-bridge-0.11.0-incubating-SNAPSHOT-shaded.jar ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Tests/bin/reef-bridge-0.11.0-incubating-SNAPSHOT-shaded.jar b/lang/cs/Org.Apache.REEF.Tests/bin/reef-bridge-0.11.0-incubating-SNAPSHOT-shaded.jar new file mode 100644 index 0000000..437d140 Binary files /dev/null and b/lang/cs/Org.Apache.REEF.Tests/bin/reef-bridge-0.11.0-incubating-SNAPSHOT-shaded.jar differ http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/05766f9d/lang/cs/Org.Apache.REEF.Tests/bin/run.cmd ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Tests/bin/run.cmd b/lang/cs/Org.Apache.REEF.Tests/bin/run.cmd new file mode 100644 index 0000000..ddff8a7 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Tests/bin/run.cmd @@ -0,0 +1,45 @@ +@REM +@REM Copyright (C) 2013 Microsoft Corporation +@REM +@REM Licensed under the Apache License, Version 2.0 (the "License"); +@REM you may not use this file except in compliance with the License. +@REM You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, software +@REM distributed under the License is distributed on an "AS IS" BASIS, +@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@REM See the License for the specific language governing permissions and +@REM limitations under the License. +@REM + +@echo off +:: +:: Copyright (C) 2013 Microsoft Corporation +:: +:: Licensed 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. +:: + + +:: RUNTIME +set SHADED_JAR=bin\reef-bridge-0.11.0-incubating-SNAPSHOT-shaded.jar + +set LOGGING_CONFIG=-Djava.util.logging.config.class=org.apache.reef.util.logging.Config + +set CLASSPATH=%HADOOP_HOME%\share\hadoop\hdfs\lib\*;%HADOOP_HOME%\share\hadoop\hdfs\*;%HADOOP_HOME%\share\hadoop\common\*;%HADOOP_HOME%\share\hadoop\common\lib\*;%HADOOP_HOME%\share\hadoop\mapreduce\lib\*;%HADOOP_HOME%\share\hadoop\mapreduce\*;%HADOOP_HOME%\share\hadoop\yarn\*;%HADOOP_HOME%\share\hadoop\yarn\lib\* + +set CMD=%JAVA_HOME%\bin\java.exe -cp %HADOOP_HOME%\etc\hadoop;%SHADED_JAR%;%CLASSPATH% %* +::%LOGGING_CONFIG% +echo %CMD% +%CMD% http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/05766f9d/lang/cs/Org.Apache.REEF.Tests/packages.config ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Tests/packages.config b/lang/cs/Org.Apache.REEF.Tests/packages.config new file mode 100644 index 0000000..ef4860c --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Tests/packages.config @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +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. +--> +<packages> + <package id="Microsoft.Data.Edm" version="5.6.3" targetFramework="net45" /> + <package id="Microsoft.Data.OData" version="5.6.3" targetFramework="net45" /> + <package id="Microsoft.Data.Services.Client" version="5.6.3" targetFramework="net45" /> + <package id="Microsoft.Hadoop.Avro" version="1.4.0.0" targetFramework="net45" /> + <package id="Microsoft.WindowsAzure.ConfigurationManager" version="2.0.3" targetFramework="net45" /> + <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net45" /> + <package id="protobuf-net" version="2.0.0.668" targetFramework="net45" /> + <package id="Rx-Core" version="2.2.5" targetFramework="net45" /> + <package id="Rx-Interfaces" version="2.2.5" targetFramework="net45" /> + <package id="System.Spatial" version="5.6.3" targetFramework="net45" /> + <package id="WindowsAzure.Storage" version="4.3.0" targetFramework="net45" /> +</packages> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/05766f9d/lang/cs/Org.Apache.REEF.Utilities/Org.Apache.Reef.Utilities.csproj ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Utilities/Org.Apache.Reef.Utilities.csproj b/lang/cs/Org.Apache.REEF.Utilities/Org.Apache.Reef.Utilities.csproj index 27899de..43003f8 100644 --- a/lang/cs/Org.Apache.REEF.Utilities/Org.Apache.Reef.Utilities.csproj +++ b/lang/cs/Org.Apache.REEF.Utilities/Org.Apache.Reef.Utilities.csproj @@ -30,7 +30,7 @@ under the License. <RestorePackages>true</RestorePackages> <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir> </PropertyGroup> - <Import Project="$(SolutionDir)\Source\build.props" /> + <Import Project="$(SolutionDir)\build.props" /> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PlatformTarget>AnyCPU</PlatformTarget> <DebugSymbols>true</DebugSymbols> http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/05766f9d/lang/cs/Org.Apache.REEF.Wake/Org.Apache.REEF.Wake.csproj ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Wake/Org.Apache.REEF.Wake.csproj b/lang/cs/Org.Apache.REEF.Wake/Org.Apache.REEF.Wake.csproj index f383707..0657a1c 100644 --- a/lang/cs/Org.Apache.REEF.Wake/Org.Apache.REEF.Wake.csproj +++ b/lang/cs/Org.Apache.REEF.Wake/Org.Apache.REEF.Wake.csproj @@ -30,7 +30,7 @@ under the License. <RestorePackages>true</RestorePackages> <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir> </PropertyGroup> - <Import Project="$(SolutionDir)\Source\build.props" /> + <Import Project="$(SolutionDir)\build.props" /> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PlatformTarget>AnyCPU</PlatformTarget> <DebugSymbols>true</DebugSymbols> http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/05766f9d/lang/cs/Org.Apache.REEF.sln ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.sln b/lang/cs/Org.Apache.REEF.sln new file mode 100644 index 0000000..8ab396d --- /dev/null +++ b/lang/cs/Org.Apache.REEF.sln @@ -0,0 +1,195 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.21005.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{2B7EE9D5-CA54-4204-B89D-B48A7FC6E3CD}" + ProjectSection(SolutionItems) = preProject + .nuget\NuGet.Config = .nuget\NuGet.Config + .nuget\NuGet.exe = .nuget\NuGet.exe + .nuget\NuGet.targets = .nuget\NuGet.targets + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.Apache.REEF.Tang", "Org.Apache.REEF.Tang\Org.Apache.REEF.Tang.csproj", "{97DBB573-3994-417A-9F69-FFA25F00D2A6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.Apache.REEF.Tang.Examples", "Org.Apache.REEF.Tang.Examples\Org.Apache.REEF.Tang.Examples.csproj", "{711B7F32-196E-4C21-9DBD-AD59C4A7CF77}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.Apache.REEF.Tang.Tests", "Org.Apache.REEF.Tang.Tests\Org.Apache.REEF.Tang.Tests.csproj", "{D5EB94D0-3ABA-4853-9050-E36B196E17D2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.Apache.REEF.Tang.Tools", "Org.Apache.REEF.Tang.Tools\Org.Apache.REEF.Tang.Tools.csproj", "{34A9CD98-0D15-4CA0-AEA5-E53593A31047}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.Apache.REEF.Utilities", "Org.Apache.REEF.Utilities\Org.Apache.REEF.Utilities.csproj", "{79E7F89A-1DFB-45E1-8D43-D71A954AEB98}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.Apache.REEF.Wake", "Org.Apache.REEF.Wake\Org.Apache.REEF.Wake.csproj", "{CDFB3464-4041-42B1-9271-83AF24CD5008}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.Apache.REEF.Wake.Tests", "Org.Apache.REEF.Wake.Tests\Org.Apache.REEF.Wake.Tests.csproj", "{214C64C6-04E5-4867-B69A-E3502EA50871}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.Apache.REEF.Common", "Org.Apache.REEF.Common\Org.Apache.REEF.Common.csproj", "{545A0582-4105-44CE-B99C-B1379514A630}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.Apache.REEF.Driver", "Org.Apache.REEF.Driver\Org.Apache.REEF.Driver.csproj", "{A6BAA2A7-F52F-4329-884E-1BCF711D6805}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.Apache.REEF.Evaluator", "Org.Apache.REEF.Evaluator\Org.Apache.REEF.Evaluator.csproj", "{1B983182-9C30-464C-948D-F87EB93A8240}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.Apache.REEF.Network", "Org.Apache.REEF.Network\Org.Apache.REEF.Network.csproj", "{883CE800-6A6A-4E0A-B7FE-C054F4F2C1DC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.Apache.REEF.Examples.RetainedEvalCLRBridge", "Org.Apache.REEF.Examples.RetainedEvalCLRBridge\Org.Apache.REEF.Examples.RetainedEvalCLRBridge.csproj", "{05EC65CF-848D-49AB-9E67-57C14EA63044}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.Apache.REEF.Examples.HelloCLRBridge", "Org.Apache.REEF.Examples.HelloCLRBridge\Org.Apache.REEF.Examples.HelloCLRBridge.csproj", "{A78DD8E8-31D0-4506-8738-DAA9DA86D55B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.Apache.REEF.Examples.Tasks", "Org.Apache.REEF.Examples.Tasks\Org.Apache.REEF.Examples.Tasks.csproj", "{75503F90-7B82-4762-9997-94B5C68F15DB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.Apache.REEF.Client", "Org.Apache.REEF.Client\Org.Apache.REEF.Client.csproj", "{5094C35B-4FDB-4322-AC05-45D684501CBF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.Apache.REEF.Tests", "Org.Apache.REEF.Tests\Org.Apache.REEF.Tests.csproj", "{988F90CF-A48D-4938-A4D2-FA3B758FB5A7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.Apache.REEF.All", "Org.Apache.REEF.All\Org.Apache.REEF.All.csproj", "{4C137C79-3A28-47D2-BFB9-A3CAB1EEDACE}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {97DBB573-3994-417A-9F69-FFA25F00D2A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {97DBB573-3994-417A-9F69-FFA25F00D2A6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {97DBB573-3994-417A-9F69-FFA25F00D2A6}.Debug|x64.ActiveCfg = Debug|x64 + {97DBB573-3994-417A-9F69-FFA25F00D2A6}.Debug|x64.Build.0 = Debug|x64 + {97DBB573-3994-417A-9F69-FFA25F00D2A6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {97DBB573-3994-417A-9F69-FFA25F00D2A6}.Release|Any CPU.Build.0 = Release|Any CPU + {97DBB573-3994-417A-9F69-FFA25F00D2A6}.Release|x64.ActiveCfg = Release|x64 + {97DBB573-3994-417A-9F69-FFA25F00D2A6}.Release|x64.Build.0 = Release|x64 + {711B7F32-196E-4C21-9DBD-AD59C4A7CF77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {711B7F32-196E-4C21-9DBD-AD59C4A7CF77}.Debug|Any CPU.Build.0 = Debug|Any CPU + {711B7F32-196E-4C21-9DBD-AD59C4A7CF77}.Debug|x64.ActiveCfg = Debug|x64 + {711B7F32-196E-4C21-9DBD-AD59C4A7CF77}.Debug|x64.Build.0 = Debug|x64 + {711B7F32-196E-4C21-9DBD-AD59C4A7CF77}.Release|Any CPU.ActiveCfg = Release|Any CPU + {711B7F32-196E-4C21-9DBD-AD59C4A7CF77}.Release|Any CPU.Build.0 = Release|Any CPU + {711B7F32-196E-4C21-9DBD-AD59C4A7CF77}.Release|x64.ActiveCfg = Release|x64 + {711B7F32-196E-4C21-9DBD-AD59C4A7CF77}.Release|x64.Build.0 = Release|x64 + {D5EB94D0-3ABA-4853-9050-E36B196E17D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D5EB94D0-3ABA-4853-9050-E36B196E17D2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D5EB94D0-3ABA-4853-9050-E36B196E17D2}.Debug|x64.ActiveCfg = Debug|x64 + {D5EB94D0-3ABA-4853-9050-E36B196E17D2}.Debug|x64.Build.0 = Debug|x64 + {D5EB94D0-3ABA-4853-9050-E36B196E17D2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D5EB94D0-3ABA-4853-9050-E36B196E17D2}.Release|Any CPU.Build.0 = Release|Any CPU + {D5EB94D0-3ABA-4853-9050-E36B196E17D2}.Release|x64.ActiveCfg = Release|x64 + {D5EB94D0-3ABA-4853-9050-E36B196E17D2}.Release|x64.Build.0 = Release|x64 + {34A9CD98-0D15-4CA0-AEA5-E53593A31047}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {34A9CD98-0D15-4CA0-AEA5-E53593A31047}.Debug|Any CPU.Build.0 = Debug|Any CPU + {34A9CD98-0D15-4CA0-AEA5-E53593A31047}.Debug|x64.ActiveCfg = Debug|x64 + {34A9CD98-0D15-4CA0-AEA5-E53593A31047}.Debug|x64.Build.0 = Debug|x64 + {34A9CD98-0D15-4CA0-AEA5-E53593A31047}.Release|Any CPU.ActiveCfg = Release|Any CPU + {34A9CD98-0D15-4CA0-AEA5-E53593A31047}.Release|Any CPU.Build.0 = Release|Any CPU + {34A9CD98-0D15-4CA0-AEA5-E53593A31047}.Release|x64.ActiveCfg = Release|x64 + {34A9CD98-0D15-4CA0-AEA5-E53593A31047}.Release|x64.Build.0 = Release|x64 + {79E7F89A-1DFB-45E1-8D43-D71A954AEB98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {79E7F89A-1DFB-45E1-8D43-D71A954AEB98}.Debug|Any CPU.Build.0 = Debug|Any CPU + {79E7F89A-1DFB-45E1-8D43-D71A954AEB98}.Debug|x64.ActiveCfg = Debug|x64 + {79E7F89A-1DFB-45E1-8D43-D71A954AEB98}.Debug|x64.Build.0 = Debug|x64 + {79E7F89A-1DFB-45E1-8D43-D71A954AEB98}.Release|Any CPU.ActiveCfg = Release|Any CPU + {79E7F89A-1DFB-45E1-8D43-D71A954AEB98}.Release|Any CPU.Build.0 = Release|Any CPU + {79E7F89A-1DFB-45E1-8D43-D71A954AEB98}.Release|x64.ActiveCfg = Release|x64 + {79E7F89A-1DFB-45E1-8D43-D71A954AEB98}.Release|x64.Build.0 = Release|x64 + {CDFB3464-4041-42B1-9271-83AF24CD5008}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CDFB3464-4041-42B1-9271-83AF24CD5008}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CDFB3464-4041-42B1-9271-83AF24CD5008}.Debug|x64.ActiveCfg = Debug|x64 + {CDFB3464-4041-42B1-9271-83AF24CD5008}.Debug|x64.Build.0 = Debug|x64 + {CDFB3464-4041-42B1-9271-83AF24CD5008}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CDFB3464-4041-42B1-9271-83AF24CD5008}.Release|Any CPU.Build.0 = Release|Any CPU + {CDFB3464-4041-42B1-9271-83AF24CD5008}.Release|x64.ActiveCfg = Release|x64 + {CDFB3464-4041-42B1-9271-83AF24CD5008}.Release|x64.Build.0 = Release|x64 + {214C64C6-04E5-4867-B69A-E3502EA50871}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {214C64C6-04E5-4867-B69A-E3502EA50871}.Debug|Any CPU.Build.0 = Debug|Any CPU + {214C64C6-04E5-4867-B69A-E3502EA50871}.Debug|x64.ActiveCfg = Debug|x64 + {214C64C6-04E5-4867-B69A-E3502EA50871}.Debug|x64.Build.0 = Debug|x64 + {214C64C6-04E5-4867-B69A-E3502EA50871}.Release|Any CPU.ActiveCfg = Release|Any CPU + {214C64C6-04E5-4867-B69A-E3502EA50871}.Release|Any CPU.Build.0 = Release|Any CPU + {214C64C6-04E5-4867-B69A-E3502EA50871}.Release|x64.ActiveCfg = Release|x64 + {214C64C6-04E5-4867-B69A-E3502EA50871}.Release|x64.Build.0 = Release|x64 + {545A0582-4105-44CE-B99C-B1379514A630}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {545A0582-4105-44CE-B99C-B1379514A630}.Debug|Any CPU.Build.0 = Debug|Any CPU + {545A0582-4105-44CE-B99C-B1379514A630}.Debug|x64.ActiveCfg = Debug|x64 + {545A0582-4105-44CE-B99C-B1379514A630}.Debug|x64.Build.0 = Debug|x64 + {545A0582-4105-44CE-B99C-B1379514A630}.Release|Any CPU.ActiveCfg = Release|Any CPU + {545A0582-4105-44CE-B99C-B1379514A630}.Release|Any CPU.Build.0 = Release|Any CPU + {545A0582-4105-44CE-B99C-B1379514A630}.Release|x64.ActiveCfg = Release|x64 + {545A0582-4105-44CE-B99C-B1379514A630}.Release|x64.Build.0 = Release|x64 + {A6BAA2A7-F52F-4329-884E-1BCF711D6805}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A6BAA2A7-F52F-4329-884E-1BCF711D6805}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A6BAA2A7-F52F-4329-884E-1BCF711D6805}.Debug|x64.ActiveCfg = Debug|x64 + {A6BAA2A7-F52F-4329-884E-1BCF711D6805}.Debug|x64.Build.0 = Debug|x64 + {A6BAA2A7-F52F-4329-884E-1BCF711D6805}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A6BAA2A7-F52F-4329-884E-1BCF711D6805}.Release|Any CPU.Build.0 = Release|Any CPU + {A6BAA2A7-F52F-4329-884E-1BCF711D6805}.Release|x64.ActiveCfg = Release|x64 + {A6BAA2A7-F52F-4329-884E-1BCF711D6805}.Release|x64.Build.0 = Release|x64 + {1B983182-9C30-464C-948D-F87EB93A8240}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1B983182-9C30-464C-948D-F87EB93A8240}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1B983182-9C30-464C-948D-F87EB93A8240}.Debug|x64.ActiveCfg = Debug|x64 + {1B983182-9C30-464C-948D-F87EB93A8240}.Debug|x64.Build.0 = Debug|x64 + {1B983182-9C30-464C-948D-F87EB93A8240}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1B983182-9C30-464C-948D-F87EB93A8240}.Release|Any CPU.Build.0 = Release|Any CPU + {1B983182-9C30-464C-948D-F87EB93A8240}.Release|x64.ActiveCfg = Release|x64 + {1B983182-9C30-464C-948D-F87EB93A8240}.Release|x64.Build.0 = Release|x64 + {883CE800-6A6A-4E0A-B7FE-C054F4F2C1DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {883CE800-6A6A-4E0A-B7FE-C054F4F2C1DC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {883CE800-6A6A-4E0A-B7FE-C054F4F2C1DC}.Debug|x64.ActiveCfg = Debug|x64 + {883CE800-6A6A-4E0A-B7FE-C054F4F2C1DC}.Debug|x64.Build.0 = Debug|x64 + {883CE800-6A6A-4E0A-B7FE-C054F4F2C1DC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {883CE800-6A6A-4E0A-B7FE-C054F4F2C1DC}.Release|Any CPU.Build.0 = Release|Any CPU + {883CE800-6A6A-4E0A-B7FE-C054F4F2C1DC}.Release|x64.ActiveCfg = Release|x64 + {883CE800-6A6A-4E0A-B7FE-C054F4F2C1DC}.Release|x64.Build.0 = Release|x64 + {05EC65CF-848D-49AB-9E67-57C14EA63044}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {05EC65CF-848D-49AB-9E67-57C14EA63044}.Debug|Any CPU.Build.0 = Debug|Any CPU + {05EC65CF-848D-49AB-9E67-57C14EA63044}.Debug|x64.ActiveCfg = Debug|x64 + {05EC65CF-848D-49AB-9E67-57C14EA63044}.Debug|x64.Build.0 = Debug|x64 + {05EC65CF-848D-49AB-9E67-57C14EA63044}.Release|Any CPU.ActiveCfg = Release|Any CPU + {05EC65CF-848D-49AB-9E67-57C14EA63044}.Release|Any CPU.Build.0 = Release|Any CPU + {05EC65CF-848D-49AB-9E67-57C14EA63044}.Release|x64.ActiveCfg = Release|x64 + {05EC65CF-848D-49AB-9E67-57C14EA63044}.Release|x64.Build.0 = Release|x64 + {A78DD8E8-31D0-4506-8738-DAA9DA86D55B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A78DD8E8-31D0-4506-8738-DAA9DA86D55B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A78DD8E8-31D0-4506-8738-DAA9DA86D55B}.Debug|x64.ActiveCfg = Debug|x64 + {A78DD8E8-31D0-4506-8738-DAA9DA86D55B}.Debug|x64.Build.0 = Debug|x64 + {A78DD8E8-31D0-4506-8738-DAA9DA86D55B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A78DD8E8-31D0-4506-8738-DAA9DA86D55B}.Release|Any CPU.Build.0 = Release|Any CPU + {A78DD8E8-31D0-4506-8738-DAA9DA86D55B}.Release|x64.ActiveCfg = Release|x64 + {A78DD8E8-31D0-4506-8738-DAA9DA86D55B}.Release|x64.Build.0 = Release|x64 + {75503F90-7B82-4762-9997-94B5C68F15DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {75503F90-7B82-4762-9997-94B5C68F15DB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {75503F90-7B82-4762-9997-94B5C68F15DB}.Debug|x64.ActiveCfg = Debug|x64 + {75503F90-7B82-4762-9997-94B5C68F15DB}.Debug|x64.Build.0 = Debug|x64 + {75503F90-7B82-4762-9997-94B5C68F15DB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {75503F90-7B82-4762-9997-94B5C68F15DB}.Release|Any CPU.Build.0 = Release|Any CPU + {75503F90-7B82-4762-9997-94B5C68F15DB}.Release|x64.ActiveCfg = Release|x64 + {75503F90-7B82-4762-9997-94B5C68F15DB}.Release|x64.Build.0 = Release|x64 + {5094C35B-4FDB-4322-AC05-45D684501CBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5094C35B-4FDB-4322-AC05-45D684501CBF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5094C35B-4FDB-4322-AC05-45D684501CBF}.Debug|x64.ActiveCfg = Debug|x64 + {5094C35B-4FDB-4322-AC05-45D684501CBF}.Debug|x64.Build.0 = Debug|x64 + {5094C35B-4FDB-4322-AC05-45D684501CBF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5094C35B-4FDB-4322-AC05-45D684501CBF}.Release|Any CPU.Build.0 = Release|Any CPU + {5094C35B-4FDB-4322-AC05-45D684501CBF}.Release|x64.ActiveCfg = Release|x64 + {5094C35B-4FDB-4322-AC05-45D684501CBF}.Release|x64.Build.0 = Release|x64 + {988F90CF-A48D-4938-A4D2-FA3B758FB5A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {988F90CF-A48D-4938-A4D2-FA3B758FB5A7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {988F90CF-A48D-4938-A4D2-FA3B758FB5A7}.Debug|x64.ActiveCfg = Debug|x64 + {988F90CF-A48D-4938-A4D2-FA3B758FB5A7}.Debug|x64.Build.0 = Debug|x64 + {988F90CF-A48D-4938-A4D2-FA3B758FB5A7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {988F90CF-A48D-4938-A4D2-FA3B758FB5A7}.Release|Any CPU.Build.0 = Release|Any CPU + {988F90CF-A48D-4938-A4D2-FA3B758FB5A7}.Release|x64.ActiveCfg = Release|x64 + {988F90CF-A48D-4938-A4D2-FA3B758FB5A7}.Release|x64.Build.0 = Release|x64 + {4C137C79-3A28-47D2-BFB9-A3CAB1EEDACE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4C137C79-3A28-47D2-BFB9-A3CAB1EEDACE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4C137C79-3A28-47D2-BFB9-A3CAB1EEDACE}.Debug|x64.ActiveCfg = Debug|x64 + {4C137C79-3A28-47D2-BFB9-A3CAB1EEDACE}.Debug|x64.Build.0 = Debug|x64 + {4C137C79-3A28-47D2-BFB9-A3CAB1EEDACE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4C137C79-3A28-47D2-BFB9-A3CAB1EEDACE}.Release|Any CPU.Build.0 = Release|Any CPU + {4C137C79-3A28-47D2-BFB9-A3CAB1EEDACE}.Release|x64.ActiveCfg = Release|x64 + {4C137C79-3A28-47D2-BFB9-A3CAB1EEDACE}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal
