コード例 #1
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();
        }
コード例 #2
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();
        }
コード例 #3
0
        /// <summary>
        /// Discovers schemas located in the users DB2 database
        /// </summary>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns>Discovered schemas</returns>
        public override async Task <DiscoverSchemasResponse> DiscoverSchemas(DiscoverSchemasRequest request,
                                                                             ServerCallContext context)
        {
            Logger.SetLogPrefix("discover");
            Logger.Info("Discovering Schemas...");

            var sampleSize = checked ((int)request.SampleSize);

            DiscoverSchemasResponse discoverSchemasResponse = new DiscoverSchemasResponse();

            // only return requested schemas if refresh mode selected
            if (request.Mode == DiscoverSchemasRequest.Types.Mode.All)
            {
                if (_server.Settings.DisableDiscovery)
                {
                    Logger.Info("Discovery is disabled. Skipping.");
                    return(new DiscoverSchemasResponse());
                }

                // get all schemas
                try
                {
                    var schemas = Discover.GetAllSchemas(_connectionFactory, _server.Settings, sampleSize);

                    discoverSchemasResponse.Schemas.AddRange(await schemas.ToListAsync());

                    Logger.Info($"Schemas returned: {discoverSchemasResponse.Schemas.Count}");

                    return(discoverSchemasResponse);
                }
                catch (Exception e)
                {
                    Logger.Error(e, e.Message, context);
                    return(new DiscoverSchemasResponse());
                }
            }

            try
            {
                var refreshSchemas = request.ToRefresh;

                Logger.Info($"Refresh schemas attempted: {refreshSchemas.Count}");

                var schemas = Discover.GetRefreshSchemas(_connectionFactory, refreshSchemas, sampleSize);

                discoverSchemasResponse.Schemas.AddRange(await schemas.ToListAsync());

                // return all schemas
                Logger.Info($"Schemas returned: {discoverSchemasResponse.Schemas.Count}");
                return(discoverSchemasResponse);
            }
            catch (Exception e)
            {
                Logger.Error(e, e.Message, context);
                return(new DiscoverSchemasResponse());
            }
        }
コード例 #4
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();
        }
コード例 #5
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();
        }
コード例 #6
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();
        }
コード例 #7
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();
        }
コード例 #8
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();
        }
コード例 #9
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();
        }
コード例 #10
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();
        }
コード例 #11
0
        /// <summary>
        /// Discovers schemas located in the users Zoho CRM instance
        /// </summary>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns>Discovered schemas</returns>
        public override async Task <DiscoverSchemasResponse> DiscoverSchemas(DiscoverSchemasRequest request,
                                                                             ServerCallContext context)
        {
            Logger.Info("Discovering Schemas...");

            // get a schema for each module found
            DiscoverSchemasResponse discoverSchemasResponse = new DiscoverSchemasResponse();

            Logger.Info("Schema discovery not supported");
            return(discoverSchemasResponse);
        }
コード例 #12
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();
        }
コード例 #13
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();
        }
コード例 #14
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();
        }
コード例 #15
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();
        }
コード例 #16
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();
        }
コード例 #17
0
        public async Task DiscoverSchemasRefreshTest()
        {
            // 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 discoverAllRequest = new DiscoverSchemasRequest
            {
                Mode       = DiscoverSchemasRequest.Types.Mode.All,
                SampleSize = 10
            };

            var request = new DiscoverSchemasRequest
            {
                Mode      = DiscoverSchemasRequest.Types.Mode.Refresh,
                ToRefresh = { GetTestSchema($"SELECT * FROM [{Constants.SchemaName}].[ReadDirectory_VEH_POL]") },
            };

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

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

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #18
0
        /// <summary>
        /// Discovers schemas located in the users Zoho CRM instance
        /// </summary>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns>Discovered schemas</returns>
        public override async Task <DiscoverSchemasResponse> DiscoverSchemas(DiscoverSchemasRequest request,
                                                                             ServerCallContext context)
        {
            Logger.Info("Discovering Schemas...");

            // get a schema for each module found
            DiscoverSchemasResponse discoverSchemasResponse = new DiscoverSchemasResponse();

//            try
//            {
//                var schemas = await Discover.GetAllReadSchemas(_client, _server.Settings);
//
//                discoverSchemasResponse.Schemas.AddRange(schemas);
//            }
//            catch (Exception e)
//            {
//                Logger.Error(e.Message);
//                throw;
//            }
//
//            Logger.Info($"Schemas found: {discoverSchemasResponse.Schemas.Count}");
//
//            // only return requested schemas if refresh mode selected
//            if (request.Mode == DiscoverSchemasRequest.Types.Mode.Refresh)
//            {
//                var refreshSchemaIds = request.ToRefresh.Select(x => x.Id);
//                var schemas =
//                    JsonConvert.DeserializeObject<Schema[]>(
//                        JsonConvert.SerializeObject(discoverSchemasResponse.Schemas));
//                discoverSchemasResponse.Schemas.Clear();
//                discoverSchemasResponse.Schemas.AddRange(schemas.Where(x => refreshSchemaIds.Contains(x.Id)));
//
//
//                Logger.Debug($"Schemas found: {JsonConvert.SerializeObject(schemas)}");
//                Logger.Debug($"Refresh requested on schemas: {refreshSchemaIds}");
//
//                Logger.Info($"Schemas returned: {discoverSchemasResponse.Schemas.Count}");
//                return discoverSchemasResponse;
//            }
//
//            // return all schemas otherwise
//            Logger.Info($"Schemas returned: {discoverSchemasResponse.Schemas.Count}");
            return(discoverSchemasResponse);
        }
コード例 #19
0
        public async Task DiscoverSchemasRefreshQueryBadSyntaxTest()
        {
            // 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", $"bad syntax") }
            };

            // act
            client.Connect(connectRequest);

            try
            {
                var response = client.DiscoverSchemas(request);
            }
            catch (Exception e)
            {
                // assert
                Assert.IsType <RpcException>(e);
                Assert.Contains("You have an error in your SQL syntax", e.Message);
            }

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #20
0
        /// <summary>
        /// Discovers schemas located in the users Zoho CRM instance
        /// </summary>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns>Discovered schemas</returns>
        public override async Task <DiscoverSchemasResponse> DiscoverSchemas(DiscoverSchemasRequest request,
                                                                             ServerCallContext context)
        {
            try
            {
                Logger.SetLogPrefix("discover");
                Logger.Info("Discovering Schemas...");

                DiscoverSchemasResponse discoverSchemasResponse = new DiscoverSchemasResponse();

                discoverSchemasResponse.Schemas.AddRange(await Discover.GetAllSchemas(_client));
                discoverSchemasResponse.Schemas.AddRange(
                    await Discover.GetAllCustomSchemas(_client, _server.Settings.CustomSchemaList));

                Logger.Info($"Schemas found: {discoverSchemasResponse.Schemas.Count}");

                // only return requested schemas if refresh mode selected
                if (request.Mode == DiscoverSchemasRequest.Types.Mode.Refresh)
                {
                    var refreshSchemas = request.ToRefresh;
                    var schemas        =
                        JsonConvert.DeserializeObject <Schema[]>(
                            JsonConvert.SerializeObject(discoverSchemasResponse.Schemas));
                    discoverSchemasResponse.Schemas.Clear();
                    discoverSchemasResponse.Schemas.AddRange(schemas.Join(refreshSchemas, schema => schema.Id,
                                                                          refreshSchema => refreshSchema.Id,
                                                                          (schema, refresh) => schema));

                    Logger.Debug($"Refresh requested on schemas: {JsonConvert.SerializeObject(refreshSchemas)}");

                    Logger.Info($"Schemas returned: {discoverSchemasResponse.Schemas.Count}");
                    return(discoverSchemasResponse);
                }

                // return all schemas otherwise
                Logger.Info($"Schemas returned: {discoverSchemasResponse.Schemas.Count}");
                return(discoverSchemasResponse);
            }
            catch (Exception e)
            {
                Logger.Error(e, e.Message, context);
                return(new DiscoverSchemasResponse());
            }
        }
コード例 #21
0
        public async Task DiscoverSchemasRefreshTest()
        {
            // 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 DiscoverSchemasRequest
            {
                Mode      = DiscoverSchemasRequest.Types.Mode.Refresh,
                ToRefresh = { new Schema
                              {
                                  Id = "3",
                                  PublisherMetaJson = "{\"Module\":\"test module\"}"
                              } }
            };

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

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

            // cleanup
            await channel.ShutdownAsync();

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

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

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

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

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #23
0
        public async Task DiscoverSchemasRefreshTest()
        {
            // setup
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginRJGWebsite.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,
                ToRefresh = { new Schema {
                                  Id = "Classes - Read"
                              }, new Schema{
                                  Id = "Contact Us"
                              } }
            };

            // act
            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();
        }
コード例 #24
0
        /// <summary>
        /// Discovers schemas located in the users CouchDB instance
        /// </summary>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns>Discovered schemas</returns>
        public override async Task <DiscoverSchemasResponse> DiscoverSchemas(DiscoverSchemasRequest request,
                                                                             ServerCallContext context)
        {
            Logger.SetLogPrefix("discover");
            Logger.Info("Discovering Schemas...");

            DiscoverSchemasResponse discoverSchemasResponse = new DiscoverSchemasResponse();

            // only return requested schemas if refresh mode selected
            if (request.Mode == DiscoverSchemasRequest.Types.Mode.All)
            {
                Logger.Info("Plugin does not support auto schema discovery.");
                return(discoverSchemasResponse);
            }

            try
            {
                var refreshSchemas = request.ToRefresh;

                Logger.Info($"Refresh schemas attempted: {refreshSchemas.Count}");

                var tasks = refreshSchemas.Select(GetSchemaProperties)
                            .ToArray();

                await Task.WhenAll(tasks);

                discoverSchemasResponse.Schemas.AddRange(tasks.Where(x => x.Result != null).Select(x => x.Result));

                // return all schemas
                Logger.Info($"Schemas returned: {discoverSchemasResponse.Schemas.Count}");

                return(discoverSchemasResponse);
            }
            catch (Exception e)
            {
                Logger.Error(e, e.Message, context);
                return(new DiscoverSchemasResponse());
            }
        }
コード例 #25
0
        public async Task WriteTest()
        {
            // 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("UpsertSubscribers");

            var connectRequest = GetConnectSettings();

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

            var records = new List <Record>()
            {
                {
                    new Record
                    {
                        Action        = Record.Types.Action.Upsert,
                        CorrelationId = "test",
                        RecordId      = "record1",
                        DataJson      = "{\"Account PKey\":\"\",\"ZZN9X\":\"\",\"FirstName\":\"Molly\",\"LastName\":\"Male\",\"Owner Email\":null,\"Owner First Name\":\"Jenna\",\"Owner Last Name\":\"Jenna\",\"Phone\":\"(263) 83-25052\",\"IPAddress\":null,\"EmailAddress\":\"[email protected]\",\"Lists\":\"[]\"}",
                    }
                }
            };

            var recordAcks = new List <RecordAck>();

            // act
            client.Connect(connectRequest);

            var schemasResponse = client.DiscoverSchemas(schemaRequest);

            var prepareWriteRequest = new PrepareWriteRequest()
            {
                Schema           = schemasResponse.Schemas[0],
                CommitSlaSeconds = 1000,
                DataVersions     = new DataVersions
                {
                    JobId            = "jobUnitTest",
                    ShapeId          = "shapeUnitTest",
                    JobDataVersion   = 1,
                    ShapeDataVersion = 1
                }
            };

            client.PrepareWrite(prepareWriteRequest);

            using (var call = client.WriteStream())
            {
                var responseReaderTask = Task.Run(async() =>
                {
                    while (await call.ResponseStream.MoveNext())
                    {
                        var ack = call.ResponseStream.Current;
                        recordAcks.Add(ack);
                    }
                });

                foreach (Record record in records)
                {
                    await call.RequestStream.WriteAsync(record);
                }

                await call.RequestStream.CompleteAsync();

                await responseReaderTask;
            }

            // assert
            Assert.Single(recordAcks);
            Assert.Equal("", recordAcks[0].Error);
            Assert.Equal("test", recordAcks[0].CorrelationId);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #26
0
        public async Task ReadStreamRealTimeTest()
        {
            // 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",
                    JobDataVersion = 1
                },
                JobId                = "test",
                RealTimeStateJson    = JsonConvert.SerializeObject(new RealTimeState()),
                RealTimeSettingsJson = JsonConvert.SerializeObject(new RealTimeSettings()),
            };

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

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

                var cancellationToken = new CancellationTokenSource();
                cancellationToken.CancelAfter(5000);
                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.Equal("Status(StatusCode=Cancelled, Detail=\"Cancelled\")", e.Message);
            }


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

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

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #27
0
        public async Task ReadStreamQuerySchemaTest()
        {
            // setup
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginOracleNet.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("test", "test", $"SELECT * FROM \"C##DEMO\".\"ACCOUNTARCHIVE\"");

            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",
            };

            // 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 <Naveego.Sdk.Plugins.Record>();

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

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

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

            Assert.Equal("3", record["\"CHANNEL_ID\""]);
            Assert.Equal("Direct Sales", record["\"CHANNEL_DESC\""]);
            Assert.Equal("Direct", record["\"CHANNEL_CLASS\""]);
            Assert.Equal("12", record["\"CHANNEL_CLASS_ID\""]);
            Assert.Equal("Channel total", record["\"CHANNEL_TOTAL\""]);
            Assert.Equal("1", record["\"CHANNEL_TOTAL_ID\""]);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #28
0
        /// <summary>
        /// Discovers schemas located in the users Zoho CRM instance
        /// </summary>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns>Discovered schemas</returns>
        public override async Task <DiscoverSchemasResponse> DiscoverSchemas(DiscoverSchemasRequest request,
                                                                             ServerCallContext context)
        {
            Logger.Info("Discovering Schemas...");

            DiscoverSchemasResponse discoverSchemasResponse = new DiscoverSchemasResponse();

            var isAuthed = await AuthorizeHttpClient();

            if (!isAuthed)
            {
                return(discoverSchemasResponse);
            }

            // get to get a schema for each module found
            try
            {
                var rulesUrl  = $"{_apiUri}/v3/mdm/merging/rules";
                var rulesResp = await _injectedClient.GetAsync(rulesUrl);

                rulesResp.EnsureSuccessStatusCode();

                dynamic rulesJson = JObject.Parse(await rulesResp.Content.ReadAsStringAsync());

                foreach (dynamic rule in rulesJson.data)
                {
                    var schema = new Schema
                    {
                        Id   = rule.@object,
                        Name = rule.@object,
                        DataFlowDirection = Schema.Types.DataFlowDirection.Read
                    };

                    // Add ID property
                    schema.Properties.Add(new Property
                    {
                        Id          = "ID",
                        Name        = "ID",
                        Type        = PropertyType.String,
                        Description = "The global identifier",
                        IsKey       = true
                    });

                    foreach (dynamic prop in rule.properties)
                    {
                        schema.Properties.Add(new Property
                        {
                            Id   = prop.name,
                            Name = prop.name,
                            Type = GetPropertyType((string)prop.type)
                        });
                    }

                    discoverSchemasResponse.Schemas.Add(schema);
                }
            }
            catch (Exception e)
            {
                Logger.Error(e, e.Message, context);
                return(new DiscoverSchemasResponse());
            }

            Logger.Info($"Schemas found: {discoverSchemasResponse.Schemas.Count}");

            // only return requested schemas if refresh mode selected
            if (request.Mode == DiscoverSchemasRequest.Types.Mode.Refresh)
            {
                var refreshSchemaIds = request.ToRefresh.Select(x => x.Id);
                var schemas          =
                    JsonConvert.DeserializeObject <Schema[]>(
                        JsonConvert.SerializeObject(discoverSchemasResponse.Schemas));
                discoverSchemasResponse.Schemas.Clear();
                discoverSchemasResponse.Schemas.AddRange(schemas.Where(x => refreshSchemaIds.Contains(x.Id)));


                Logger.Debug($"Schemas found: {JsonConvert.SerializeObject(schemas)}");
                Logger.Debug($"Refresh requested on schemas: {refreshSchemaIds}");

                Logger.Info($"Schemas returned: {discoverSchemasResponse.Schemas.Count}");
                return(discoverSchemasResponse);
            }

            // return all schemas otherwise
            Logger.Info($"Schemas returned: {discoverSchemasResponse.Schemas.Count}");
            return(discoverSchemasResponse);
        }
コード例 #29
0
        public async Task ReadStreamQuerySchemaTest()
        {
            // 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 schema = GetTestSchema("test", "test", $"SELECT * FROM `classicmodels`.`orders`");

            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",
            };

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

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

            Assert.Equal((long)10100, record["`orderNumber`"]);
            Assert.Equal(DateTime.Parse("2003-01-06"), record["`orderDate`"]);
            Assert.Equal(DateTime.Parse("2003-01-13"), record["`requiredDate`"]);
            Assert.Equal(DateTime.Parse("2003-01-10"), record["`shippedDate`"]);
            Assert.Equal("Shipped", record["`status`"]);
            Assert.Equal("", record["`comments`"]);
            Assert.Equal((long)363, record["`customerNumber`"]);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
コード例 #30
0
        public async Task ReadStreamTableSchemaTest()
        {
            // 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 schema = GetTestSchema("`classicmodels`.`customers`", "classicmodels.customers");

            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",
            };

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

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

            Assert.Equal((long)103, record["`customerNumber`"]);
            Assert.Equal("Atelier graphique", record["`customerName`"]);
            Assert.Equal("Schmitt", record["`contactLastName`"]);
            Assert.Equal("Carine", record["`contactFirstName`"]);
            Assert.Equal("40.32.2555", record["`phone`"]);
            Assert.Equal("54, rue Royale", record["`addressLine1`"]);
            Assert.Equal("", record["`addressLine2`"]);
            Assert.Equal("Nantes", record["`city`"]);
            Assert.Equal("", record["`state`"]);
            Assert.Equal("44000", record["`postalCode`"]);
            Assert.Equal("France", record["`country`"]);
            Assert.Equal((long)1370, record["`salesRepEmployeeNumber`"]);
            Assert.Equal("21000.00", record["`creditLimit`"]);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }