Пример #1
0
        public async Task <ConfigureResponse> Configure(string host, ConfigureRequest config)
        {
            using (var handler = getHandler())
            {
                using (var client = new HttpClient(handler))
                {
                    // Configure client
                    UriBuilder uriBuilder = new UriBuilder(HTTPS_SCHEME, host, PORT_NUMBER);
                    client.BaseAddress = uriBuilder.Uri;

                    // Configure content
                    var json    = JsonConvert.SerializeObject(config);
                    var content = new StringContent(json);
                    content.Headers.ContentType = new MediaTypeHeaderValue(CONTENT_TYPE);

                    // Make request
                    var response = await client.PostAsync("api/configure", content);

                    if (!response.IsSuccessStatusCode)
                    {
                        throw new Exception();
                    }

                    // Process reponse
                    var jsonResponse = await response.Content.ReadAsStringAsync();

                    var configResponse = JsonConvert.DeserializeObject <ConfigureResponse>(jsonResponse);
                    return(configResponse);
                }
            }
        }
Пример #2
0
 public RunReadJobScenario(Publisher.PublisherBase publisher,
                           ConfigureRequest configureRequest, ReadRequest readRequest)
 {
     _publisher        = publisher;
     _configureRequest = configureRequest;
     _readRequest      = readRequest;
 }
Пример #3
0
        public async Task <WebSocket> ConnectAsync(Uri uri, CancellationToken cancellationToken)
        {
            WebSocketFeature webSocketFeature = null;
            var contextBuilder = new HttpContextBuilder(_application, AllowSynchronousIO, PreserveExecutionContext);

            contextBuilder.Configure(context =>
            {
                var request    = context.Request;
                var scheme     = uri.Scheme;
                scheme         = (scheme == "ws") ? "http" : scheme;
                scheme         = (scheme == "wss") ? "https" : scheme;
                request.Scheme = scheme;
                if (!request.Host.HasValue)
                {
                    request.Host = uri.IsDefaultPort
                        ? new HostString(HostString.FromUriComponent(uri).Host)
                        : HostString.FromUriComponent(uri);
                }
                request.Path     = PathString.FromUriComponent(uri);
                request.PathBase = PathString.Empty;
                if (request.Path.StartsWithSegments(_pathBase, out var remainder))
                {
                    request.Path     = remainder;
                    request.PathBase = _pathBase;
                }
                request.QueryString = QueryString.FromUriComponent(uri);
                request.Headers.Add(HeaderNames.Connection, new string[] { "Upgrade" });
                request.Headers.Add(HeaderNames.Upgrade, new string[] { "websocket" });
                request.Headers.Add(HeaderNames.SecWebSocketVersion, new string[] { "13" });
                request.Headers.Add(HeaderNames.SecWebSocketKey, new string[] { CreateRequestKey() });
                if (SubProtocols.Any())
                {
                    request.Headers.Add(HeaderNames.SecWebSocketProtocol, SubProtocols.ToArray());
                }

                request.Body = Stream.Null;

                // WebSocket
                webSocketFeature = new WebSocketFeature(context);
                context.Features.Set <IHttpWebSocketFeature>(webSocketFeature);

                ConfigureRequest?.Invoke(context.Request);
            });

            var httpContext = await contextBuilder.SendAsync(cancellationToken);

            if (httpContext.Response.StatusCode != StatusCodes.Status101SwitchingProtocols)
            {
                throw new InvalidOperationException("Incomplete handshake, status code: " + httpContext.Response.StatusCode);
            }
            if (webSocketFeature.ClientWebSocket == null)
            {
                throw new InvalidOperationException("Incomplete handshake");
            }

            return(webSocketFeature.ClientWebSocket);
        }
Пример #4
0
        public async Task DiscoverSchemasAllTest()
        {
            // setup
            var mockHttp = GetMockHttpMessageHandler();

            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginSalesforce.Plugin.Plugin(mockHttp.ToHttpClient())) },
                Ports    = { new ServerPort("localhost", 0, ServerCredentials.Insecure) }
            };

            server.Start();

            var port = server.Ports.First().BoundPort;

            var channel = new Channel($"localhost:{port}", ChannelCredentials.Insecure);
            var client  = new Publisher.PublisherClient(channel);

            var configureRequest = new ConfigureRequest
            {
                TemporaryDirectory = "../../../Temp",
                PermanentDirectory = "../../../Perm",
                LogDirectory       = "../../../Logs",
                DataVersions       = new DataVersions(),
                LogLevel           = LogLevel.Debug
            };

            var connectRequest = GetConnectSettings();

            var request = new DiscoverSchemasRequest
            {
                Mode = DiscoverSchemasRequest.Types.Mode.All,
            };

            // act
            client.Configure(configureRequest);
            client.Connect(connectRequest);
            var response = client.DiscoverSchemas(request);

            // assert
            Assert.IsType <DiscoverSchemasResponse>(response);
            Assert.Equal(2, response.Schemas.Count);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
Пример #5
0
        public async Task <GameSocket> ConnectAsync(Uri uri, CancellationToken cancellationToken)
        {
            GameSocketFeature gameSocketFeature = null;
            var contextBuilder = new ProtoContextBuilder(_application, AllowSynchronousIO);

            contextBuilder.Configure(context =>
            {
                var request      = context.Request;
                var scheme       = uri.Scheme;
                scheme           = (scheme == "ws") ? "http" : scheme;
                scheme           = (scheme == "wss") ? "https" : scheme;
                request.Scheme   = scheme;
                request.Path     = PathString.FromUriComponent(uri);
                request.PathBase = PathString.Empty;
                if (request.Path.StartsWithSegments(_pathBase, out var remainder))
                {
                    request.Path     = remainder;
                    request.PathBase = _pathBase;
                }
                request.QueryString = QueryString.FromUriComponent(uri);
                request.Headers.Add("Connection", new string[] { "Upgrade" });
                request.Headers.Add("Upgrade", new string[] { "gamesocket" });
                request.Headers.Add("Sec-GameSocket-Version", new string[] { "13" });
                request.Headers.Add("Sec-GameSocket-Key", new string[] { CreateRequestKey() });
                request.Body = Stream.Null;

                // GameSocket
                gameSocketFeature = new GameSocketFeature(context);
                context.Features.Set <IProtoGameSocketFeature>(gameSocketFeature);

                ConfigureRequest?.Invoke(context.Request);
            });

            var httpContext = await contextBuilder.SendAsync(cancellationToken);

            if (httpContext.Response.StatusCode != StatusCodes.Status101SwitchingProtocols)
            {
                throw new InvalidOperationException("Incomplete handshake, status code: " + httpContext.Response.StatusCode);
            }
            if (gameSocketFeature.ClientGameSocket == null)
            {
                throw new InvalidOperationException("Incomplete handshake");
            }

            return(gameSocketFeature.ClientGameSocket);
        }
Пример #6
0
        /// <summary>
        /// Configures the plugin
        /// </summary>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public override Task <ConfigureResponse> Configure(ConfigureRequest request, ServerCallContext context)
        {
            Logger.Debug("Got configure request");
            Logger.Debug(JsonConvert.SerializeObject(request, Formatting.Indented));

            // ensure all directories are created
            Directory.CreateDirectory(request.TemporaryDirectory);
            Directory.CreateDirectory(request.PermanentDirectory);
            Directory.CreateDirectory(request.LogDirectory);

            // configure logger
            Logger.SetLogLevel(request.LogLevel);
            Logger.Init(request.LogDirectory);

            _server.Config = request;

            return(Task.FromResult(new ConfigureResponse()));
        }
Пример #7
0
        public ConfigureResponse Configure(ConfigureRequest request)
        {
            ToastHelper.PopToast("Configure");

            if (request.FirewallEnabled)
            {
                FirewallHelper.EnableFirewall();
            }
            else
            {
                FirewallHelper.DisableFirewall();
            }

            var response = new ConfigureResponse();

            response.FirewallEnabled = FirewallHelper.IsEnabled();
            return(response);
        }
        public ActionResult SetConfiguration([FromBody] ConfigureRequest model)
        {
            m_Logger.Info($"[PUT] {APIRoutes.ConfigurationRoute}");
            if (string.IsNullOrWhiteSpace(model.ManagementInformationPath))
            {
                m_Logger.Debug("Required parameter ManagementInformationPath is null, empty or whitespace");
                return(BadRequest());
            }

            if (!Directory.Exists(model.ManagementInformationPath))
            {
                m_Logger.Debug($"Required parameter ManagementInformationPath point to path that doesn't exist: {model.ManagementInformationPath}");
                return(BadRequest());
            }

            m_Manager.ManagementInformationPath = model.ManagementInformationPath;

            m_MemoryCache.Set(CacheKeys.ManagementInformationKey, model.ManagementInformationPath);
            return(Ok());
        }
Пример #9
0
        public async Task <WebSocket> ConnectAsync(Uri uri, CancellationToken cancellationToken)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);

            var cancellation = cancellationToken.Register(() => request.Abort());

            request.Headers[Constants.Headers.SecWebSocketVersion] = Constants.Headers.SupportedVersion;
            if (SubProtocols.Count > 0)
            {
                request.Headers[Constants.Headers.SecWebSocketProtocol] = string.Join(", ", SubProtocols);
            }

            ConfigureRequest?.Invoke(request);

            HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();

            cancellation.Dispose();

            InspectResponse?.Invoke(response);

            // TODO: Validate handshake
            HttpStatusCode statusCode = response.StatusCode;

            if (statusCode != HttpStatusCode.SwitchingProtocols)
            {
                response.Dispose();
                throw new InvalidOperationException("Incomplete handshake, invalid status code: " + statusCode);
            }
            // TODO: Validate Sec-WebSocket-Key/Sec-WebSocket-Accept

            string subProtocol = response.Headers[Constants.Headers.SecWebSocketProtocol];

            if (!string.IsNullOrEmpty(subProtocol) && !SubProtocols.Contains(subProtocol, StringComparer.OrdinalIgnoreCase))
            {
                throw new InvalidOperationException("Incomplete handshake, the server specified an unknown sub-protocol: " + subProtocol);
            }

            var stream = response.GetResponseStream();

            return(CommonWebSocket.CreateClientWebSocket(stream, subProtocol, KeepAliveInterval, ReceiveBufferSize, UseZeroMask));
        }
Пример #10
0
        private static string BuildConfigureRequest(string input)
        {
            var command = (ConfigureCommand)Enum.Parse(typeof(ConfigureCommand), input.Split(' ').FirstOrDefault(), true);
            var request = new ConfigureRequest
            {
                Command        = command,
                ServiceOptions = input.Split(' ').Skip(1).FirstOrDefault()
            };

            switch (command)
            {
            case ConfigureCommand.Get:
                break;

            case ConfigureCommand.Update:
                var options = new Dictionary <string, string>();
                foreach (var pair in input.Split('-').AsEnumerable().Skip(1).Select(o => o.Trim().Split(' ')))
                {
                    options.Add(pair.FirstOrDefault(), pair.LastOrDefault());
                }
                request.Options = options;
                break;

            default:
                Console.WriteLine("Invalid request.");
                return(null);
            }

            var message = new Message()
            {
                Service = Service.Configure,
                Data    = JsonConvert.SerializeObject(request)
            };

            return(Convert.ToBase64String(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(message))));
        }
Пример #11
0
 public override Task <ConfigureResponse> Configure(ConfigureRequest request, ServerCallContext context)
 {
     return(Task.FromResult(new ConfigureResponse()));
 }
Пример #12
0
 public ConfigureResponse Post([FromBody] ConfigureRequest request)
 {
     return(Program.Callbacks.Configure(request));
 }
Пример #13
0
        public async Task ReadStreamSftpTest()
        {
            // setup
            PrepareTestEnvironment(false);
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginAunsight.Plugin.Plugin()) },
                Ports    = { new ServerPort("localhost", 0, ServerCredentials.Insecure) }
            };

            server.Start();

            var port = server.Ports.First().BoundPort;

            var channel = new Channel($"localhost:{port}", ChannelCredentials.Insecure);
            var client  = new Publisher.PublisherClient(channel);

            var configureRequest = new ConfigureRequest
            {
                TemporaryDirectory = "../../../Temp",
                PermanentDirectory = "../../../Perm",
                LogDirectory       = "../../../Logs",
                DataVersions       = new DataVersions(),
                LogLevel           = LogLevel.Debug
            };

            var connectRequest = GetConnectSettings(null, 8, "*.xls", false, false, null, null, true);

            var schemaRequest = new DiscoverSchemasRequest
            {
                Mode = DiscoverSchemasRequest.Types.Mode.All,
            };

            var settings = GetSettings();
            var schema   = GetTestSchema($"SELECT * FROM [{Constants.SchemaName}].[ReadDirectory]");

            schema.PublisherMetaJson = JsonConvert.SerializeObject(new SchemaPublisherMetaJson
            {
                RootPath = settings.RootPaths.First()
            });

            var request = new ReadRequest()
            {
                DataVersions = new DataVersions
                {
                    JobId = "test"
                },
                JobId = "test",
            };

            // act
            client.Configure(configureRequest);
            client.Connect(connectRequest);
            var schemasResponse = client.DiscoverSchemas(schemaRequest);

            request.Schema = schemasResponse.Schemas[0];

            var response       = client.ReadStream(request);
            var responseStream = response.ResponseStream;
            var records        = new List <Record>();

            while (await responseStream.MoveNext())
            {
                records.Add(responseStream.Current);
            }

            // assert
            Assert.Equal(618, records.Count);

            var record = JsonConvert.DeserializeObject <Dictionary <string, object> >(records[0].DataJson);

            Assert.Equal("90371", record["HCPCS Code"]);
            Assert.Equal("Hep b ig im", record["Short Description"]);
            Assert.Equal("1 ML", record["HCPCS Code Dosage"]);
            Assert.Equal("115.892", record["Payment Limit"]);
            Assert.Equal("", record["Vaccine AWP%"]);
            Assert.Equal("", record["Vaccine Limit"]);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
Пример #14
0
        public async Task ReadStreamSftpTest()
        {
            // setup
            PrepareTestEnvironment(false);
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginAunsight.Plugin.Plugin()) },
                Ports    = { new ServerPort("localhost", 0, ServerCredentials.Insecure) }
            };

            server.Start();

            var port = server.Ports.First().BoundPort;

            var channel = new Channel($"localhost:{port}", ChannelCredentials.Insecure);
            var client  = new Publisher.PublisherClient(channel);

            var configureRequest = new ConfigureRequest
            {
                TemporaryDirectory = "../../../Temp",
                PermanentDirectory = "../../../Perm",
                LogDirectory       = "../../../Logs",
                DataVersions       = new DataVersions(),
                LogLevel           = LogLevel.Debug
            };

            var connectRequest = GetConnectSettings(null, 0, null, false, false, true);

            var query = $@"SELECT
h.ssn,
h.firstname,
m.risk_score,
r.factor_code,
r.factor_text
FROM xmltest_CONSUMER h
LEFT OUTER JOIN xmltest_RISK_MODEL m
ON h.GLOBAL_KEY = m.GLOBAL_KEY
LEFT OUTER JOIN xmltest_RISK_FACTOR r
ON m.GLOBAL_KEY = r.GLOBAL_KEY";

            var discoverRequest = new DiscoverSchemasRequest
            {
                Mode      = DiscoverSchemasRequest.Types.Mode.Refresh,
                ToRefresh = { GetTestSchema(query) },
            };

            var request = new ReadRequest()
            {
                DataVersions = new DataVersions
                {
                    JobId = "test"
                },
                JobId = "test",
            };

            // act
            client.Configure(configureRequest);
            client.Connect(connectRequest);
            var schemasResponse = client.DiscoverSchemas(discoverRequest);

            request.Schema = schemasResponse.Schemas[0];

            var response       = client.ReadStream(request);
            var responseStream = response.ResponseStream;
            var records        = new List <Record>();

            while (await responseStream.MoveNext())
            {
                records.Add(responseStream.Current);
            }

            // assert
            Assert.Equal(7, records.Count);

            var record = JsonConvert.DeserializeObject <Dictionary <string, object> >(records[0].DataJson);

            Assert.Equal("6075", record["ssn"]);
            Assert.Equal("string", record["firstname"]);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
Пример #15
0
        public async Task ReadStreamRealTimeTest()
        {
            // setup
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginSalesforce.Plugin.Plugin()) },
                Ports    = { new ServerPort("localhost", 0, ServerCredentials.Insecure) }
            };

            server.Start();

            var port = server.Ports.First().BoundPort;

            var channel = new Channel($"localhost:{port}", ChannelCredentials.Insecure);
            var client  = new Publisher.PublisherClient(channel);

            var configureRequest = new ConfigureRequest
            {
                TemporaryDirectory = "../../../Temp",
                PermanentDirectory = "../../../Perm",
                LogDirectory       = "../../../Logs",
                DataVersions       = new DataVersions(),
                LogLevel           = LogLevel.Debug
            };

            var schema = GetTestSchema(null, @"Lead", @"Lead");
            // var schema = GetTestSchema(null, @"LeadUpdates", @"LeadUpdates", "Select Id, Name FROM Lead");
            // var schema = GetTestSchema(null, @"/topic/LeadUpdates", @"/topic/LeadUpdates", "Select Id, Name FROM Lead");


            var connectRequest = GetConnectSettings();

            var schemaRequest = new DiscoverSchemasRequest
            {
                Mode      = DiscoverSchemasRequest.Types.Mode.Refresh,
                ToRefresh = { schema }
            };

            var realTimeSettings = new RealTimeSettings
            {
                ChannelName        = "LeadsAll",
                BatchWindowSeconds = 5
            };

            var request = new ReadRequest()
            {
                DataVersions = new DataVersions
                {
                    JobId          = "test",
                    JobDataVersion = 1
                },
                JobId                = "test",
                RealTimeStateJson    = JsonConvert.SerializeObject(new RealTimeState()),
                RealTimeSettingsJson = JsonConvert.SerializeObject(realTimeSettings),
            };

            // act
            var records = new List <Record>();

            try
            {
                client.Configure(configureRequest);
                client.Connect(connectRequest);
                var schemasResponse = client.DiscoverSchemas(schemaRequest);
                request.Schema = schemasResponse.Schemas[0];

                var cancellationToken = new CancellationTokenSource();
                cancellationToken.CancelAfter(10000);
                var response       = client.ReadStream(request, null, null, cancellationToken.Token);
                var responseStream = response.ResponseStream;

                while (await responseStream.MoveNext())
                {
                    records.Add(responseStream.Current);
                }
            }
            catch (Exception e)
            {
                Assert.Contains("Status(StatusCode=\"Cancelled\", Detail=\"Cancelled\"", e.Message);
            }


            // assert
            Assert.Equal(1023, records.Where(r => r.Action == Record.Types.Action.Upsert).ToList().Count);

            var record = JsonConvert.DeserializeObject <Dictionary <string, object> >(records[0].DataJson);
            // Assert.Equal("~", record["tilde"]);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
Пример #16
0
 public PluginTestScenarioBuilder <T> Configure(Action <ConfigureRequest> config)
 {
     _configureRequest = new ConfigureRequest();
     config(_configureRequest);
     return(this);
 }