public EvaluatorConfigurations(string configFile)
        {
            using (LOGGER.LogFunction("EvaluatorConfigurations::EvaluatorConfigurations"))
            {
                if (string.IsNullOrWhiteSpace(configFile))
                {
                    Utilities.Diagnostics.Exceptions.Throw(new ArgumentNullException("configFile"), LOGGER);
                }
                if (!File.Exists(configFile))
                {
                    Utilities.Diagnostics.Exceptions.Throw(new FileNotFoundException("cannot find file " + configFile), LOGGER);
                }

                AvroConfigurationSerializer serializer = new AvroConfigurationSerializer();
                var classHierarchy = TangFactory.GetTang()
                    .GetClassHierarchy(new string[] { typeof(ApplicationIdentifier).Assembly.GetName().Name });
                var evaluatorConfiguration = serializer.FromFile(configFile, classHierarchy);

                IInjector evaluatorInjector = TangFactory.GetTang().NewInjector(evaluatorConfiguration);

                LOGGER.Log(Level.Info, 
                    string.Format(CultureInfo.CurrentCulture, "Evaluator Configuration is deserialized from file {0}:", configFile));
                try
                {
                    _taskConfiguration = evaluatorInjector.GetNamedInstance<InitialTaskConfiguration, string>();
                }
                catch (InjectionException)
                {
                    LOGGER.Log(Level.Info, "InitialTaskConfiguration is not set in Evaluator.config.");
                }

                try
                {
                    _rootContextConfiguration = evaluatorInjector.GetNamedInstance<RootContextConfiguration, string>();
                }
                catch (InjectionException)
                {
                    LOGGER.Log(Level.Warning, "RootContextConfiguration is not set in Evaluator.config.");
                }

                try
                {
                    _rootServiceConfiguration = evaluatorInjector.GetNamedInstance<RootServiceConfiguration, string>();
                }
                catch (InjectionException)
                {
                    LOGGER.Log(Level.Info, "RootServiceConfiguration is not set in Evaluator.config.");
                }

                _applicationId = evaluatorInjector.GetNamedInstance<ApplicationIdentifier, string>();
                _remoteId = evaluatorInjector.GetNamedInstance<DriverRemoteIdentifier, string>();
                _evaluatorId = evaluatorInjector.GetNamedInstance<EvaluatorIdentifier, string>();
                _errorHandlerRid = evaluatorInjector.GetNamedInstance<ErrorHandlerRid, string>();
                _launchId = evaluatorInjector.GetNamedInstance<LaunchId, string>();
            }
        }
Example #2
0
        /// <summary>
        /// Read evaluator configuration from evaluator.conf generated from Java
        /// </summary>
        /// <param name="evaluatorConfigFile"></param>
        /// <returns></returns>
        private static IConfiguration ReadEvaluatorConfiguration(string evaluatorConfigFile)
        {
            if (string.IsNullOrWhiteSpace(evaluatorConfigFile))
            {
                Utilities.Diagnostics.Exceptions.Throw(new ArgumentNullException("configFile"), logger);
            }
            if (!File.Exists(evaluatorConfigFile))
            {
                Utilities.Diagnostics.Exceptions.Throw(new FileNotFoundException("cannot find file " + evaluatorConfigFile), logger);
            }

            AvroConfigurationSerializer serializer = new AvroConfigurationSerializer();
            var classHierarchy = TangFactory.GetTang()
                .GetClassHierarchy(new string[] { typeof(ApplicationIdentifier).Assembly.GetName().Name });
            var evaluatorConfiguration = serializer.FromFile(evaluatorConfigFile, classHierarchy);

            logger.Log(Level.Info, 
                string.Format(CultureInfo.CurrentCulture, "Evaluator Configuration is deserialized from file {0}:", evaluatorConfigFile));

            return evaluatorConfiguration;
        }
        public void TestDeserializationForContextAndTask()
        {
            AvroConfigurationSerializer serializer = new AvroConfigurationSerializer();
            
            var classHierarchy = TangFactory.GetTang()
                .GetClassHierarchy(new string[] { typeof(ApplicationIdentifier).Assembly.GetName().Name });
            var config = serializer.FromFile("evaluator.conf", classHierarchy);

            IInjector evaluatorInjector = TangFactory.GetTang().NewInjector(config);

            string taskConfigString = evaluatorInjector.GetNamedInstance<InitialTaskConfiguration, string>();
            string contextConfigString = evaluatorInjector.GetNamedInstance<RootContextConfiguration, string>();

            var contextClassHierarchy = TangFactory.GetTang().GetClassHierarchy(new string[]
            {
                typeof(ContextConfigurationOptions.ContextIdentifier).Assembly.GetName().Name
            });
            var contextConfig = serializer.FromString(contextConfigString, contextClassHierarchy);

            var taskClassHierarchy = TangFactory.GetTang().GetClassHierarchy(new string[]
            {
                typeof(ITask).Assembly.GetName().Name,
                typeof(HelloTask).Assembly.GetName().Name
            });
            var taskConfig = serializer.FromString(taskConfigString, taskClassHierarchy);

            var contextInjector = evaluatorInjector.ForkInjector(contextConfig);
            string contextId = contextInjector.GetNamedInstance<ContextConfigurationOptions.ContextIdentifier, string>();
            Assert.True(contextId.StartsWith(ContextIdPrefix));

            var taskInjector = contextInjector.ForkInjector(taskConfig);

            string taskId = taskInjector.GetNamedInstance<TaskConfigurationOptions.Identifier, string>();
            ITask task = taskInjector.GetInstance<ITask>();
            Assert.True(taskId.StartsWith("HelloTask"));
            Assert.True(task is HelloTask);
        }
        public void TestDeserializationForServiceAndContext()
        {
            AvroConfigurationSerializer serializer = new AvroConfigurationSerializer();

            var classHierarchy = TangFactory.GetTang()
                .GetClassHierarchy(new string[] { typeof(ApplicationIdentifier).Assembly.GetName().Name });
            var config = serializer.FromFile("evaluatorWithService.conf", classHierarchy);

            IInjector evaluatorInjector = TangFactory.GetTang().NewInjector(config);

            string contextConfigString = evaluatorInjector.GetNamedInstance<RootContextConfiguration, string>();
            string rootServiceConfigString = evaluatorInjector.GetNamedInstance<RootServiceConfiguration, string>();

            var contextClassHierarchy = TangFactory.GetTang().GetClassHierarchy(new string[]
            {
                typeof(ContextConfigurationOptions.ContextIdentifier).Assembly.GetName().Name
            });

            var contextConfig = serializer.FromString(contextConfigString, contextClassHierarchy);

            var serviceClassHierarchy = TangFactory.GetTang().GetClassHierarchy(new string[]
            {
                typeof(ServicesConfigurationOptions).Assembly.GetName().Name,
                typeof(IStreamingCodec<>).Assembly.GetName().Name
            });
            var rootServiceConfig = serializer.FromString(rootServiceConfigString, serviceClassHierarchy);

            var contextInjector = evaluatorInjector.ForkInjector(contextConfig);
            string contextId = contextInjector.GetNamedInstance<ContextConfigurationOptions.ContextIdentifier, string>();
            Assert.True(contextId.StartsWith("MasterTaskContext"));

            string serviceConfigString = TangFactory.GetTang().NewInjector(rootServiceConfig)
                .GetNamedInstance<ServicesConfigurationOptions.ServiceConfigString, string>();

            var serviceConfig = serializer.FromString(serviceConfigString, serviceClassHierarchy);

            var serviceInjector = contextInjector.ForkInjector(serviceConfig);
            var tcpCountRange = serviceInjector.GetNamedInstance<TcpPortRangeStart, int>();
            var tcpCountCount = serviceInjector.GetNamedInstance<TcpPortRangeCount, int>();
            Assert.True(tcpCountRange > 0);
            Assert.True(tcpCountCount > 0);
        }
 public override IConfiguration RoundTrip(IConfiguration configuration)
 {
     AvroConfigurationSerializer serializer = new AvroConfigurationSerializer();
     serializer.ToFile(configuration, "TangTest.avroconf");
     return serializer.FromFile("TangTest.avroconf");
 }