コード例 #1
0
        public async Task ConnectTest()
        {
            // set up

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

            server.Start();

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

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

            var request = GetConnectSettings();

            // act
            var response = client.Connect(request);

            // assert
            Assert.IsType <ConnectResponse>(response);

            // clean up
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #2
0
        static async Task Main(string[] args)
        {
            Console.WriteLine("Publisher");

            AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
            var channel = GrpcChannel.ForAddress(EndpointsConstants.BrokerAddress);
            var client  = new Publisher.PublisherClient(channel);

            while (true)
            {
                Console.Write("Enter the topic: ");
                var topic = Console.ReadLine().ToLower();

                Console.Write("Enter content: ");
                var content = Console.ReadLine();

                var request = new PublishRequest()
                {
                    Topic = topic, Content = content
                };

                try
                {
                    var reply = await client.PublishMessageAsync(request);

                    Console.WriteLine($"Publish Reply: {reply.IsSuccess}");
                }
                catch (Exception e)
                {
                    Console.WriteLine($"Error publishin the message: {e.Message}");
                }
            }
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: vglinca/DistributedSystems
        static async Task Main(string[] args)
        {
            Console.WriteLine("Running sensor...");

            var channel         = CreateSecureChannel();
            var publisherClient = new Publisher.PublisherClient(channel);

            var rnd = new Random();

            Console.WriteLine("Sensor type: ");
            var sensor = Console.ReadLine().Trim().ToLower();

            while (true)
            {
                var data    = rnd.Next(low, high + 1);
                var command = new PublishCommand {
                    Sensor = sensor, Data = data
                };
                try
                {
                    await publisherClient.PublishMessageAsync(command);

                    Console.WriteLine($"Send: {sensor} -> {data}");
                    await Task.Delay(data);
                }
                catch (Exception e)
                {
                    Console.WriteLine($"Could not send data. {e.Message}");
                }
            }
        }
コード例 #4
0
        public async Task ConnectTest()
        {
            // setup
            var mockHttp = new MockHttpMessageHandler();

            mockHttp.When("https://creator.zoho.com/api/json/applications?scope=creatorapi&authtoken=mocktoken")
            .Respond("application/json",
                     "{\"result\":{\"application_list\":{\"applications\":[{\"application\":[{\"created_time\":\"2019-03-1305:29:27.0\",\"application_name\":\"EventManagement\",\"access\":\"private\",\"link_name\":\"event-management\",\"time_zone\":\"IST\",\"dateformat\":\"dd-MMM-yyyy\"}]}]},\"application_owner\":\"wyattroehler\"}}");

            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginZohoCreator.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 request = GetConnectSettings();

            // act
            var response = client.Connect(request);

            // assert
            Assert.IsType <ConnectResponse>(response);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #5
0
        public async Task ConnectGlobalAndLocalConfigurationFileTest()
        {
            // 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 request = GetConnectSettings(null, ",", null, false, true, true);

            // act
            var response = client.Connect(request);

            // assert
            Assert.IsType <ConnectResponse>(response);
            Assert.Equal("", response.SettingsError);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #6
0
        public async Task ConnectTest()
        {
            // setup
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginCampaigner.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 request = GetConnectSettings();

            // act
            var response = client.Connect(request);

            // assert
            Assert.IsType <ConnectResponse>(response);
            Assert.Equal("", response.SettingsError);
            Assert.Equal("", response.ConnectionError);
            Assert.Equal("", response.OauthError);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #7
0
        public async Task DisconnectTest()
        {
            // setup
            var mockHttp = new MockHttpMessageHandler();

            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginZohoCreator.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 request = new DisconnectRequest();

            // act
            var response = client.Disconnect(request);

            // assert
            Assert.IsType <DisconnectResponse>(response);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #8
0
        public async Task ReadStreamLimitTest()
        {
            // setup
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginCampaigner.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 schema = GetTestSchema();

            var connectRequest = GetConnectSettings();

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

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

            // act
            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(1, records.Count);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #9
0
        public async Task DiscoverSchemasRefreshTest()
        {
            // setup
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginMockaroo.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 connectRequest = GetConnectSettings();

            var request = new DiscoverSchemasRequest
            {
                Mode       = DiscoverSchemasRequest.Types.Mode.Refresh,
                SampleSize = 10,
                ToRefresh  = { GetTestSchema("cclf1", "cclf1", new MockSchema
                    {
                        Count = 10,
                        Name  = "cclf1"
                    }) }
            };

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

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

            var schema = response.Schemas[0];

            Assert.Equal($"cclf1", schema.Id);
            Assert.Equal("cclf1", schema.Name);
            Assert.Equal($"", schema.Query);
            Assert.Equal(10, schema.Sample.Count);
            Assert.Equal(17, schema.Properties.Count);

            var property = schema.Properties[0];

            Assert.Equal("field1", property.Id);
            Assert.Equal("field1", property.Name);
            Assert.Equal("", property.Description);
            Assert.Equal(PropertyType.String, property.Type);
            Assert.False(property.IsKey);
            Assert.True(property.IsNullable);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #10
0
        public async Task PrepareWriteTest()
        {
            // 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 connectRequest = GetConnectSettings();

            var request = new PrepareWriteRequest()
            {
                Schema = new Schema
                {
                    Id         = "Account",
                    Properties =
                    {
                        new Property
                        {
                            Id    = "Id",
                            Type  = PropertyType.String,
                            IsKey = true
                        },
                        new Property
                        {
                            Id   = "Name",
                            Type = PropertyType.String
                        },
                        new Property
                        {
                            Id              = "LastModifiedDate",
                            Type            = PropertyType.Datetime,
                            IsUpdateCounter = true
                        }
                    }
                },
                CommitSlaSeconds = 1
            };

            // act
            client.Connect(connectRequest);
            var response = client.PrepareWrite(request);

            // assert
            Assert.IsType <PrepareWriteResponse>(response);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #11
0
        public async Task DiscoverSchemasRefreshTableTest()
        {
            // setup
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginBigQuery.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 connectRequest = GetConnectSettings();

            var request = new DiscoverSchemasRequest
            {
                Mode       = DiscoverSchemasRequest.Types.Mode.Refresh,
                SampleSize = 10,
                ToRefresh  = { GetTestSchema("`testdata`.`table1`", "testdata.table1") }
                // ToRefresh = {GetTestSchema("`testdata`.`emptytable`", "testdata.emptytable")}
            };

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

            // assert
            Assert.IsType <DiscoverSchemasResponse>(response);
            Assert.Single(response.Schemas);

            var schema = response.Schemas[0];

            Assert.Equal($"`testdata`.`table1`", schema.Id);
            Assert.Equal("testdata.table1", schema.Name);
            Assert.Equal($"", schema.Query);
            Assert.Equal(10, schema.Sample.Count);
            Assert.Equal(6, schema.Properties.Count);

            //Properties is null here also
            var property = schema.Properties[0];

            Assert.Equal("col1", property.Id);
            Assert.Equal("col1", property.Name);
            Assert.Equal("", property.Description);
            Assert.Equal(PropertyType.Integer, property.Type);
            Assert.False(property.IsKey);
            Assert.True(property.IsNullable);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #12
0
        public async Task DiscoverSchemasAllTest()
        {
            // 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 connectRequest = GetConnectSettings();

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

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

            // assert
            Assert.IsType <DiscoverSchemasResponse>(response);
            Assert.Single(response.Schemas);

            var schema = response.Schemas[0];

            Assert.Equal($"[{Constants.SchemaName}].[ReadDirectory_VEH_POL]", schema.Id);
            Assert.Equal("ReadDirectory_VEH_POL", schema.Name);
            Assert.Equal($"SELECT * FROM [{Constants.SchemaName}].[ReadDirectory_VEH_POL]", schema.Query);
            // Assert.Equal(Count.Types.Kind.Exact, schema.Count.Kind);
            // Assert.Equal(1000, schema.Count.Value);
            Assert.Equal(10, schema.Sample.Count);
            Assert.Equal(138, schema.Properties.Count);

            var property = schema.Properties[0];

            Assert.Equal("VEH.NUM", property.Id);
            Assert.Equal("VEH.NUM", property.Name);
            Assert.Equal("", property.Description);
            Assert.Equal(PropertyType.String, property.Type);
            Assert.False(property.IsKey);
            Assert.True(property.IsNullable);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #13
0
        public async Task ReadStreamTest()
        {
            // setup

            Server server = new Server
            {
                Services = { Publisher.BindService(new Plugin.Plugin(GetMockHttpMessageHandler().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 connectRequest = GetConnectSettings();

            var request = new ReadRequest()
            {
                Schema = new Schema
                {
                    Id         = "[Customers.address]",
                    Properties =
                    {
                        new Property {
                            Id = "_id", Name = "_id", Type = PropertyType.Integer
                        },
                        new Property {
                            Id = "title", Name = "title", Type = PropertyType.String
                        }
                    },
                    Query = "query"
                },
                Limit = 2
            };

            // act
            client.Connect(connectRequest);
            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(5, records.Count);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #14
0
ファイル: Program.cs プロジェクト: georgewwww/PAD
        static async Task Main(string[] args)
        {
            Console.WriteLine("Sender");

            var httpHandler = new HttpClientHandler
            {
                ServerCertificateCustomValidationCallback =
                    HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
            };

            var channel = GrpcChannel.ForAddress(Settings.BROKER_ADDRESS, new GrpcChannelOptions {
                HttpHandler = httpHandler
            });
            var client = new Publisher.PublisherClient(channel);

            Console.Write("Enter the bank name: ");
            var bankName = Console.ReadLine().ToLower();
            var rates    = new Dictionary <Currency, double>();

            while (true)
            {
                rates.Clear();
                Console.WriteLine("Enter the rates for each currency (0 - not present)");

                foreach (var suit in (Currency[])Enum.GetValues(typeof(Currency)))
                {
                    Console.Write($" # {suit}: ");
                    var rate = Convert.ToDouble(Console.ReadLine());
                    if (rate > 0)
                    {
                        rates.Add(suit, rate);
                    }
                }

                var ratesString = JsonConvert.SerializeObject(rates);

                var request = new PublishRequest
                {
                    Bank    = bankName,
                    Content = ratesString
                };

                try
                {
                    var reply = await client.PublishMessageAsync(request);

                    Console.WriteLine($"Publish reply: {reply.IsSuccess}");
                }
                catch (RpcException e)
                {
                    Console.WriteLine($"Details: {e.Status.Detail}");
                    Console.WriteLine($"Status code: {e.Status.StatusCode}");
                }

                Console.ReadLine();
            }
        }
コード例 #15
0
        public async Task ReadStreamTableSchemaTest()
        {
            // setup
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginDb2.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 connectRequest = GetConnectSettings();


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

            // act
            client.Connect(connectRequest);
            var schemas = client.DiscoverSchemas(new DiscoverSchemasRequest());

            request.Schema = schemas.Schemas.First();

            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(1000, records.Count);

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

            Assert.Equal((long)1, record["\"ID\""]);
            Assert.Equal("Madison", record["\"FIRST_NAME\""]);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #16
0
        public async Task DiscoverSchemasRefreshTest()
        {
            // set up
            Server server = new Server
            {
                Services = { Publisher.BindService(new Plugin.Plugin(GetMockHttpMessageHandler().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 connectRequest = GetConnectSettings();

            var request = new DiscoverSchemasRequest
            {
                Mode      = DiscoverSchemasRequest.Types.Mode.Refresh,
                ToRefresh = { GetTestSchema("DiscoverSchemas") }
            };

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

            // assert
            Assert.IsType <DiscoverSchemasResponse>(response);
            Assert.Single(response.Schemas);

            var schema = response.Schemas[0];

            Assert.Equal("test", schema.Id);
            Assert.Equal("test", schema.Name);
            Assert.Equal(2, schema.Properties.Count);

            var firstProperty = schema.Properties[0];

            Assert.Equal("_id", firstProperty.Id);
            Assert.Equal("_id", firstProperty.Name);
            Assert.Equal(PropertyType.String, firstProperty.Type);

            var secondProperty = schema.Properties[1];

            Assert.Equal("title", secondProperty.Id);
            Assert.Equal("title", secondProperty.Name);
            Assert.Equal(PropertyType.String, secondProperty.Type);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #17
0
        public async Task BeginOAuthFlowTest()
        {
            // 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 request = new BeginOAuthFlowRequest()
            {
                Configuration = new OAuthConfiguration
                {
                    ClientId          = "client",
                    ClientSecret      = "secret",
                    ConfigurationJson = "{}"
                },
                RedirectUrl = "http://test.com"
            };

            var clientId     = request.Configuration.ClientId;
            var responseType = "code";
            var redirectUrl  = request.RedirectUrl;
            var prompt       = "consent";
            var display      = "popup";

            var authUrl = String.Format(
                "https://test.salesforce.com/services/oauth2/authorize?client_id={0}&response_type={1}&redirect_uri={2}&prompt={3}&display={4}",
                clientId,
                responseType,
                redirectUrl,
                prompt,
                display);

            // act
            var response = client.BeginOAuthFlow(request);

            // assert
            Assert.IsType <BeginOAuthFlowResponse>(response);
            Assert.Equal(authUrl, response.AuthorizationUrl);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #18
0
        public async Task DiscoverSchemasAllTest()
        {
            // setup
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginBigQuery.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 connectRequest = GetConnectSettings();

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

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

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

            var schema = response.Schemas[0];

            Assert.Equal($"`testdata`.`NaveegoReplicationMetaData`", schema.Id);
            Assert.Equal("testdata.NaveegoReplicationMetaData", schema.Name);
            Assert.Equal($"", schema.Query);
            Assert.Equal(2, schema.Sample.Count);
            Assert.Equal(5, schema.Properties.Count);


            var property = schema.Properties[0];

            Assert.Equal("NaveegoJobId", property.Id);
            Assert.Equal("NaveegoJobId", property.Name);
            Assert.Equal("", property.Description);
            Assert.Equal(PropertyType.String, property.Type);
            Assert.False(property.IsKey);
            Assert.True(property.IsNullable);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #19
0
        public async Task DiscoverSchemasRefreshTableTest()
        {
            // setup
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginCassandra.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 connectRequest = GetConnectSettings();

            var request = new DiscoverSchemasRequest
            {
                Mode       = DiscoverSchemasRequest.Types.Mode.Refresh,
                SampleSize = 10,
                ToRefresh  = { GetTestSchema("\"system_schema\".\"tables\"", "system_schema.tables") }
            };

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

            // assert
            Assert.IsType <DiscoverSchemasResponse>(response);
            Assert.Single(response.Schemas);

            var schema = response.Schemas[0];

            Assert.Equal($"\"system_schema\".\"tables\"", schema.Id);
            Assert.Equal("system_schema.tables", schema.Name);
            Assert.Equal($"", schema.Query);
            Assert.Equal(10, schema.Sample.Count);
            Assert.Equal(20, schema.Properties.Count);

            var property = schema.Properties[0];

            Assert.Equal("bloom_filter_fp_chance", property.Id);
            Assert.Equal("bloom_filter_fp_chance", property.Name);
            Assert.Equal("", property.Description);
            Assert.Equal(PropertyType.Float, property.Type);
            Assert.False(property.IsKey);
            Assert.True(property.IsNullable);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #20
0
        public async Task DiscoverSchemasRefreshQueryTest()
        {
            // setup
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginMariaDB.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 connectRequest = GetConnectSettings();

            var request = new DiscoverSchemasRequest
            {
                Mode       = DiscoverSchemasRequest.Types.Mode.Refresh,
                SampleSize = 10,
                ToRefresh  = { GetTestSchema("test", "test", $"SELECT * FROM `classicmodels`.`customers`") }
            };

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

            // assert
            Assert.IsType <DiscoverSchemasResponse>(response);
            Assert.Single(response.Schemas);

            var schema = response.Schemas[0];

            Assert.Equal($"test", schema.Id);
            Assert.Equal("test", schema.Name);
            Assert.Equal($"SELECT * FROM `classicmodels`.`customers`", schema.Query);
            Assert.Equal(10, schema.Sample.Count);
            Assert.Equal(13, schema.Properties.Count);

            var property = schema.Properties[0];

            Assert.Equal("`customerNumber`", property.Id);
            Assert.Equal("customerNumber", property.Name);
            Assert.Equal("", property.Description);
            Assert.Equal(PropertyType.Integer, property.Type);
            Assert.True(property.IsKey);
            Assert.False(property.IsNullable);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #21
0
        public async Task DiscoverSchemasAllTest()
        {
            // setup
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginSnowflake.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 connectRequest = GetConnectSettings();

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

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

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

            var schema = response.Schemas[0];

            Assert.Equal($"\"PUBLIC\".\"MOCK_DATA\"", schema.Id);
            Assert.Equal("PUBLIC.MOCK_DATA", schema.Name);
            Assert.Equal($"", schema.Query);
            Assert.Equal(10, schema.Sample.Count);
            Assert.Equal(11, schema.Properties.Count);

            var property = schema.Properties[0];

            Assert.Equal("\"ID\"", property.Id);
            Assert.Equal("ID", property.Name);
            Assert.Equal("", property.Description);
            Assert.Equal(PropertyType.Text, property.Type);
            Assert.False(property.IsKey);
            Assert.True(property.IsNullable);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #22
0
        public async Task DiscoverSchemasRefreshTest()
        {
            // setup
            var mockHttp = new MockHttpMessageHandler();

            mockHttp.When("https://creator.zoho.com/api/json/applications?scope=creatorapi&authtoken=mocktoken")
            .Respond("application/json",
                     "{\"result\":{\"application_list\":{\"applications\":[{\"application\":[{\"created_time\":\"2019-03-1305:29:27.0\",\"application_name\":\"EventManagement\",\"access\":\"private\",\"link_name\":\"event-management\",\"time_zone\":\"IST\",\"dateformat\":\"dd-MMM-yyyy\"}]}]},\"application_owner\":\"wyattroehler\"}}");

            mockHttp.When("https://creator.zoho.com/api/json/event-management/formsandviews?scope=creatorapi&zc_ownername=wyattroehler&authtoken=mocktoken")
            .Respond("application/json",
                     "{\"application-name\":[\"event-management\",{\"viewList\":[{\"viewCount\":8},{\"linkid\":71,\"componentid\":3836610000000031391,\"displayname\":\"BookEvents\",\"componentname\":\"Book_Events_Mobile\",\"formlinkname\":\"Create_New_Event\"},{\"linkid\":72,\"componentid\":3836610000000031569,\"displayname\":\"EventsCalendar\",\"componentname\":\"Events_Calendar\",\"formlinkname\":\"Create_New_Event\"},{\"linkid\":73,\"componentid\":3836610000000031573,\"displayname\":\"AllEventsList\",\"componentname\":\"All_Events_List\",\"formlinkname\":\"Create_New_Event\"},{\"linkid\":74,\"componentid\":3836610000000031577,\"displayname\":\"PaidEventBookings\",\"componentname\":\"Booked_Entries\",\"formlinkname\":\"Book_Paid_Events\"},{\"linkid\":75,\"componentid\":3836610000000031579,\"displayname\":\"FreeEventBookings\",\"componentname\":\"Booked_Free_Entries\",\"formlinkname\":\"Book_Free_Events1\"},{\"linkid\":76,\"componentid\":3836610000000031581,\"displayname\":\"AllVenues\",\"componentname\":\"All_Venues\",\"formlinkname\":\"Add_Venue\"},{\"linkid\":77,\"componentid\":3836610000000031583,\"displayname\":\"AllEventCategories\",\"componentname\":\"All_Event_Categories\",\"formlinkname\":\"Add_Event_Category\"},{\"linkid\":78,\"componentid\":3836610000000031585,\"displayname\":\"ViewAttendees\",\"componentname\":\"All_Customers\",\"formlinkname\":\"Add_Customer\"}],\"formList\":[{\"formCount\":1},{\"linkid\":49,\"displayname\":\"CreateNewEvent\",\"componentname\":\"Create_New_Event\"}]}]}");

            mockHttp.When("https://creator.zoho.com/api/json/event-management/Create_New_Event/fields?scope=creatorapi&zc_ownername=wyattroehler&authtoken=mocktoken")
            .Respond("application/json",
                     "{\"application-name\":[\"event-management\",{\"form-name\":[\"Create_New_Event\",{\"Fields\":[{\"Reqd\":true,\"Type\":100,\"Choices\":[{\"choice1\":\"3836610000000030013\"}],\"Tooltip\":\"\",\"DisplayName\":\"EventCategory\",\"Unique\":false,\"FieldName\":\"Event_Category\",\"apiType\":12},{\"Reqd\":true,\"Type\":1,\"Tooltip\":\"\",\"DisplayName\":\"EventName\",\"Unique\":false,\"MaxChar\":255,\"FieldName\":\"Event_Name\",\"Initial\":\"\",\"apiType\":1},{\"Reqd\":true,\"Type\":100,\"Choices\":[{\"choice1\":\"3836610000000030019\"}],\"Tooltip\":\"\",\"DisplayName\":\"Venue\",\"Unique\":false,\"FieldName\":\"Venue\",\"apiType\":12},{\"Reqd\":true,\"Type\":22,\"Tooltip\":\"\",\"DisplayName\":\"EventStartTime\",\"Unique\":false,\"FieldName\":\"Event_Start_Time\",\"Initial\":\"\",\"apiType\":11},{\"Reqd\":true,\"Type\":22,\"Tooltip\":\"\",\"DisplayName\":\"EventEndTime\",\"Unique\":false,\"FieldName\":\"Event_End_Time\",\"Initial\":\"\",\"apiType\":11},{\"Reqd\":false,\"Type\":31,\"Tooltip\":\"\",\"DisplayName\":\"EventID\",\"Unique\":false,\"FieldName\":\"Event_ID\",\"apiType\":9},{\"Reqd\":true,\"Type\":100,\"Choices\":[{\"choice1\":\"Free\",\"choice2\":\"Paid\"}],\"Tooltip\":\"\",\"DisplayName\":\"TicketType\",\"Unique\":false,\"FieldName\":\"Subscription_Type\",\"apiType\":12},{\"Reqd\":true,\"altTxtReq\":false,\"Type\":20,\"imgLinkReq\":false,\"imgTitleReq\":false,\"Tooltip\":\"\",\"DisplayName\":\"EventImage\",\"Unique\":false,\"FieldName\":\"Event_Image\",\"apiType\":18},{\"Reqd\":true,\"Type\":6,\"Tooltip\":\"\",\"DisplayName\":\"EntryFees\",\"Unique\":false,\"MaxChar\":10,\"FieldName\":\"Entry_Fees\",\"Initial\":\"0\",\"CurrencyType\":\"USD\",\"apiType\":8},{\"Reqd\":true,\"Type\":5,\"Tooltip\":\"\",\"DisplayName\":\"Numberofentries\",\"Unique\":false,\"MaxChar\":10,\"FieldName\":\"Number_of_entries\",\"Initial\":\"0\",\"apiType\":5},{\"Reqd\":false,\"Type\":5,\"Tooltip\":\"\",\"DisplayName\":\"AvailableEntries\",\"Unique\":false,\"MaxChar\":10,\"FieldName\":\"Available_Entries\",\"Initial\":\"0\",\"apiType\":5},{\"Reqd\":true,\"Type\":3,\"Tooltip\":\"\",\"DisplayName\":\"EventDescription\",\"Unique\":false,\"FieldName\":\"Remarks\",\"apiType\":2},{\"Reqd\":false,\"Type\":101,\"Choices\":[{\"choice1\":\"Active\",\"choice2\":\"Ended\"}],\"Tooltip\":\"\",\"DisplayName\":\"EventStatus\",\"Unique\":false,\"FieldName\":\"Event_Status\",\"apiType\":13}],\"DisplayName\":\"CreateNewEvent\"}]}]}");

            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginZohoCreator.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 connectRequest = GetConnectSettings();

            var request = new DiscoverSchemasRequest
            {
                Mode      = DiscoverSchemasRequest.Types.Mode.Refresh,
                ToRefresh = { new Schema {
                                  Id = "2"
                              } }
            };

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

            // assert
            Assert.IsType <DiscoverSchemasResponse>(response);
            Assert.Empty(response.Schemas);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #23
0
        public async Task ReadStreamQueryTest()
        {
            // 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 connectRequest = GetConnectSettings();

            var discoverRequest = new DiscoverSchemasRequest
            {
                Mode      = DiscoverSchemasRequest.Types.Mode.Refresh,
                ToRefresh = { new Schema {
                                  Id = "Custom", Name = "Custom", Query = "SELECT id, name from Account"
                              } }
            };

            // act
            client.Connect(connectRequest);
            var discoverResponse = client.DiscoverSchemas(discoverRequest);

            var request = new ReadRequest()
            {
                Schema = discoverResponse.Schemas.First(),
            };

            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(12, records.Count);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #24
0
        public async Task PrepareWriteTest()
        {
            // setup
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginMariaDB.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 connectRequest = GetConnectSettings();

            var request = new PrepareWriteRequest()
            {
                Schema           = GetTestSchema(),
                CommitSlaSeconds = 1,
                Replication      = new ReplicationWriteRequest
                {
                    SettingsJson = JsonConvert.SerializeObject(new ConfigureReplicationFormData
                    {
                        SchemaName       = "test",
                        GoldenTableName  = "gr_test",
                        VersionTableName = "vr_test"
                    })
                },
                DataVersions = new DataVersions
                {
                    JobId            = "jobUnitTest",
                    ShapeId          = "shapeUnitTest",
                    JobDataVersion   = 1,
                    ShapeDataVersion = 2
                }
            };

            // act
            client.Connect(connectRequest);
            var response = client.PrepareWrite(request);

            // assert
            Assert.IsType <PrepareWriteResponse>(response);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #25
0
        public async Task DiscoverSchemasRefreshBadMockSchemaNameTest()
        {
            // setup
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginMockaroo.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 connectRequest = GetConnectSettings();

            var request = new DiscoverSchemasRequest
            {
                Mode       = DiscoverSchemasRequest.Types.Mode.Refresh,
                SampleSize = 10,
                ToRefresh  = { GetTestSchema("id", "name", new MockSchema
                    {
                        Count = 10,
                        Name  = "bad"
                    }) }
            };

            // act
            client.Connect(connectRequest);

            try
            {
                var response = client.DiscoverSchemas(request);
            }
            catch (Exception e)
            {
                // assert
                Assert.IsType <RpcException>(e);
                Assert.Contains("Schema bad not found", e.Message);
            }

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #26
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();
        }
コード例 #27
0
        public async Task PrepareWriteTest()
        {
            // setup
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginSage.Plugin.Plugin(GetMockSessionFactory())) },
                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 connectRequest = GetConnectSettings();

            var request = new PrepareWriteRequest
            {
                Schema = new Schema
                {
                    Name = "test",
                    PublisherMetaJson = "{\"Module\":\"test module\"}"
                },
                CommitSlaSeconds = 1,
                DataVersions     = new DataVersions
                {
                    JobId            = "test",
                    ShapeId          = "test",
                    JobDataVersion   = 1,
                    ShapeDataVersion = 1
                }
            };

            // act
            client.Connect(connectRequest);
            var response = client.PrepareWrite(request);

            // assert
            Assert.IsType <PrepareWriteResponse>(response);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #28
0
        public async Task ReadStreamLimitTest()
        {
            // setup
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginSage.Plugin.Plugin(GetMockSessionFactory())) },
                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 connectRequest = GetConnectSettings();

            var request = new ReadRequest()
            {
                Schema = new Schema
                {
                    Id = "3",
                    PublisherMetaJson = "{\"Module\":\"test module\"}"
                },
                Limit = 1
            };

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

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

            // assert
            Assert.Single(records);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #29
0
        public async Task DiscoverSchemasRefreshQueryBadSyntaxTest()
        {
            // setup
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginBigQuery.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 connectRequest = GetConnectSettings();

            var request = new DiscoverSchemasRequest
            {
                Mode       = DiscoverSchemasRequest.Types.Mode.Refresh,
                SampleSize = 10,
                ToRefresh  = { GetTestSchema("testdata.table1", "testdata.table1", $"bad syntax") }
            };

            // act
            client.Connect(connectRequest);

            try
            {
                var response = client.DiscoverSchemas(request);
            }
            catch (Exception e)
            {
                // assert
                Assert.IsType <RpcException>(e);

                Regex rgx    = new Regex("Job.*contained errors", RegexOptions.Compiled);
                bool  passed = rgx.IsMatch(e.Message);
                Assert.True(passed);
            }

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #30
0
        public async Task ConnectFailedTest()
        {
            // setup
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginMySQL.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);

            const string wrongUsername = "******";

            var request = new ConnectRequest
            {
                SettingsJson = JsonConvert.SerializeObject(new Settings
                {
                    Hostname = "localhost",
                    Database = "test_db",
                    Port     = "3306",
                    Username = wrongUsername,
                    Password = "******"
                }),
                OauthConfiguration = new OAuthConfiguration(),
                OauthStateJson     = ""
            };

            // act
            var response = client.Connect(request);

            // assert
            Assert.IsType <ConnectResponse>(response);
            Assert.Equal("", response.SettingsError);
            Assert.Equal($"Access denied for user '{wrongUsername}'@'172.17.0.1' (using password: YES)", response.ConnectionError);
            Assert.Equal("", response.OauthError);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }