예제 #1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ServiceArguments"/> class, explicitly specifying the arguments.
 /// Typically used in tests.
 /// </summary>
 /// <param name="serviceStartupMode">Optional. The service startup mode to use.</param>
 /// <param name="consoleOutputMode">Optional. The console output mode to use.</param>
 /// <param name="basePortOverride">Optional. The base port override to use, or null to not override the base port.</param>
 public ServiceArguments(ServiceStartupMode serviceStartupMode = ServiceStartupMode.Unspecified,
                         ConsoleOutputMode consoleOutputMode   = ConsoleOutputMode.Unspecified,
                         int?basePortOverride     = null, string instanceName = null,
                         int?shutdownWhenPidExits = null, int?slotNumber      = null, int?shutdownWaitTimeSec = null, int?serviceDrainTimeSec = null)
 {
     ServiceStartupMode   = serviceStartupMode;
     ConsoleOutputMode    = consoleOutputMode;
     BasePortOverride     = basePortOverride;
     InstanceName         = instanceName;
     ShutdownWhenPidExits = shutdownWhenPidExits;
     SlotNumber           = slotNumber;
     OnStopWaitTimeSec    = shutdownWaitTimeSec;
     ApplyDefaults();
 }
예제 #2
0
        protected virtual ServiceArguments GetServiceArguments(int?basePortOverride, bool isSecondary, int?shutdownWaitTime, ServiceStartupMode startupMode = ServiceStartupMode.CommandLineNonInteractive)
        {
            if (isSecondary && basePortOverride == null)
            {
                throw new ArgumentException("You must specify a basePortOverride when running a secondary silo.");
            }

            var siloClusterMode        = isSecondary ? SiloClusterMode.SecondaryNode : SiloClusterMode.PrimaryNode;
            ServiceArguments arguments = new ServiceArguments(startupMode, basePortOverride: basePortOverride, siloClusterMode: siloClusterMode, shutdownWaitTimeSec: shutdownWaitTime);

            if (basePortOverride != null)
            {
                return(arguments);
            }

            var commonConfig = new BaseCommonConfig();
            var mapper       = new OrleansServiceInterfaceMapper(new AssemblyProvider(new ApplicationDirectoryProvider(commonConfig), commonConfig, Log));
            var basePort     = mapper.ServiceInterfaceTypes.First().GetCustomAttribute <HttpServiceAttribute>().BasePort;

            return(new ServiceArguments(startupMode, basePortOverride: basePort, shutdownWaitTimeSec: shutdownWaitTime));
        }
예제 #3
0
        public NonOrleansServiceTester(int basePortOverride, IResolutionRoot resolutionRoot, TimeSpan?shutdownWaitTime = null, ServiceStartupMode startupMode = ServiceStartupMode.CommandLineNonInteractive)
        {
            var serviceArguments = GetServiceArguments(basePortOverride, false, shutdownWaitTime.HasValue?(int?)shutdownWaitTime.Value.TotalSeconds:null, startupMode);

            BasePort       = basePortOverride;
            ResolutionRoot = resolutionRoot;
            _stopTask      = _host.RunAsync(serviceArguments);
        }
예제 #4
0
        public static NonOrleansServiceTester <TServiceHost> GetServiceTesterForNonOrleansService <TServiceHost>(this IResolutionRoot kernel, int?basePortOverride = null, TimeSpan?shutdownWaitTime = null, ServiceStartupMode startupMode = ServiceStartupMode.CommandLineNonInteractive)
            where TServiceHost : ServiceHostBase, new()
        {
            var tester = kernel.Get <NonOrleansServiceTester <TServiceHost> >(
                new ConstructorArgument(nameof(basePortOverride), basePortOverride),
                new ConstructorArgument(nameof(shutdownWaitTime), shutdownWaitTime),
                new ConstructorArgument(nameof(startupMode), startupMode));

            return(tester);
        }