Esempio n. 1
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();
        }
Esempio n. 2
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();
        }
Esempio n. 3
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();
        }
Esempio n. 4
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();
        }
Esempio n. 5
0
        public async Task WriteTest()
        {
            // 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 configureRequest = new ConfigureWriteRequest
            {
                Form = new ConfigurationFormRequest
                {
                    DataJson = JsonConvert.SerializeObject(new ConfigureWriteFormData
                    {
                        StoredProcedure = "`test`.`UpsertIntoTestTable`"
                    })
                }
            };

            var records = new List <Record>()
            {
                {
                    new Record
                    {
                        Action        = Record.Types.Action.Upsert,
                        CorrelationId = "test",
                        RecordId      = "record1",
                        DataJson      = "{\"id\":\"1\",\"name\":\"Test First\"}",
                    }
                }
            };

            var recordAcks = new List <RecordAck>();

            // act
            client.Connect(connectRequest);

            var configureResponse = client.ConfigureWrite(configureRequest);

            var prepareWriteRequest = new PrepareWriteRequest()
            {
                Schema           = configureResponse.Schema,
                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();
        }
Esempio n. 6
0
        public async Task ReplicationWriteTest()
        {
            // 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 prepareWriteRequest = new PrepareWriteRequest()
            {
                Schema           = GetTestReplicationSchema(),
                CommitSlaSeconds = 1000,
                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 = 1
                }
            };

            var records = new List <Record>()
            {
                {
                    new Record
                    {
                        Action        = Record.Types.Action.Upsert,
                        CorrelationId = "test",
                        RecordId      = "record1",
                        DataJson      = $"{{\"Id\":1,\"Name\":\"Test Company\",\"DateTime\":\"{DateTime.Today}\",\"Date\":\"{DateTime.Now.Date}\",\"Time\":\"{DateTime.Now:hh:mm:ss}\",\"Decimal\":\"13.04\"}}",
                        Versions      =
                        {
                            new RecordVersion
                            {
                                RecordId = "version1",
                                DataJson = $"{{\"Id\":1,\"Name\":\"Test Company\",\"DateTime\":\"{DateTime.Now}\",\"Date\":\"{DateTime.Now.Date}\",\"Time\":\"{DateTime.Now:hh:mm:ss}\",\"Decimal\":\"13.04\"}}",
                            }
                        }
                    }
                }
            };

            var recordAcks = new List <RecordAck>();

            // act
            client.Connect(connectRequest);
            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();
        }
Esempio n. 7
0
        public async Task WriteStreamReplicationTest()
        {
            // 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 prepareRequest = new PrepareWriteRequest()
            {
                Schema = new Schema
                {
                    Id         = "Test",
                    Properties =
                    {
                        new Property
                        {
                            Id   = "_id",
                            Name = "_id",
                            Type = PropertyType.String,
                        },
                        new Property
                        {
                            Id   = "title",
                            Name = "title",
                            Type = PropertyType.String
                        }
                    }
                },
                CommitSlaSeconds = 10,
                Replication      = new ReplicationWriteRequest
                {
                    SettingsJson = "{\"DatabaseName\":\"DatabaseName\"}",
                }
            };

            var records = GetTestRecords();

            var recordAcks = new List <RecordAck>();

            // act
            client.Connect(connectRequest);
            client.PrepareWrite(prepareRequest);

            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("test", recordAcks[0].CorrelationId);

            // clean up
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
Esempio n. 8
0
        public async Task WriteStreamTest()
        {
            // 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 discoverSchemasRequest = new DiscoverSchemasRequest
            {
                Mode      = DiscoverSchemasRequest.Types.Mode.Refresh,
                ToRefresh = { new Schema {
                                  Id = "Account"
                              } }
            };

            var prepareRequest = 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 = 5
            };

            var records = new List <Record>()
            {
                {
                    new Record
                    {
                        Action        = Record.Types.Action.Upsert,
                        CorrelationId = "test",
                        DataJson      = "{\"Id\":1,\"Name\":\"Test Company\",\"LastModifiedDate\":\"4/10/2019\"}"
                    }
                }
            };

            var recordAcks = new List <RecordAck>();

            // act
            client.Connect(connectRequest);
            client.DiscoverSchemas(discoverSchemasRequest);
            client.PrepareWrite(prepareRequest);

            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();
        }
Esempio n. 9
0
        public async Task WriteTest()
        {
            // setup
            Server server = new Server
            {
                Services = { Publisher.BindService(new PluginHubspot.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("UpsertCompanies");

            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      = "{\"createdate\":\"2021-05-06T16:55:49.689Z\",\"domain\":\"sample.com\",\"hs_lastmodifieddate\":\"2021-05-06T16:56:10.131Z\",\"hs_object_id\":\"6021949042\",\"name\":\"Updated Sample Company\",\"hs_unique_creation_key\":\"6021949042\"}",
                    }
                },
                {
                    new Record
                    {
                        Action        = Record.Types.Action.Upsert,
                        CorrelationId = "test",
                        RecordId      = "record2",
                        DataJson      = "{\"domain\":\"newsample.com\",\"name\":\"New Sample Company\"}",
                    }
                }
            };

            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.Equal(2, recordAcks.Count);
            Assert.Equal("", recordAcks[0].Error);
            Assert.Equal("test", recordAcks[0].CorrelationId);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
Esempio n. 10
0
        public async Task WriteStreamTest()
        {
            // 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 prepareRequest = new PrepareWriteRequest()
            {
                Schema           = GetTestSchema(),
                CommitSlaSeconds = 1,
                DataVersions     = new DataVersions
                {
                    JobId            = "test",
                    ShapeId          = "test",
                    JobDataVersion   = 1,
                    ShapeDataVersion = 1
                }
            };

            var records = GetTestRecords();

            var recordAcks = new List <RecordAck>();

            // act
            client.Connect(connectRequest);
            client.PrepareWrite(prepareRequest);

            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.Equal(2, recordAcks.Count);
            Assert.Equal("", recordAcks[0].Error);
            Assert.Equal("test", recordAcks[0].CorrelationId);
            Assert.Equal("error", recordAcks[1].Error);
            Assert.Equal("more-test", recordAcks[1].CorrelationId);

            // cleanup
            await channel.ShutdownAsync();

            await server.ShutdownAsync();
        }
Esempio n. 11
0
        public async Task WriteStreamTest()
        {
            // 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 discoverRequest = new DiscoverSchemasRequest
            {
                Mode      = DiscoverSchemasRequest.Types.Mode.Refresh,
                ToRefresh = { new Schema {
                                  Id = "Classes - Write"
                              } }
            };

            client.Connect(connectRequest);
            var discoverResponse = client.DiscoverSchemas(discoverRequest);
            var schema           = discoverResponse.Schemas[0];

            var prepareRequest = new PrepareWriteRequest()
            {
                Schema           = schema,
                CommitSlaSeconds = 1000,
                DataVersions     = new DataVersions
                {
                    JobId            = "jobUnitTest",
                    ShapeId          = "shapeUnitTest",
                    JobDataVersion   = 1,
                    ShapeDataVersion = 1
                }
            };

            var records = new List <Record>()
            {
                { new Record
                  {
                      Action        = Record.Types.Action.Upsert,
                      CorrelationId = "test",
                      DataJson      = "{ \"id\": 215657, \"sku\": \"310000000003\", \"course_sku\": \"pc-b\", \"start_date\": \"2020-07-01\", \"end_date\": \"2020-07-08\", \"location_city\": \"Online\", \"location_state\": \"\", \"language\": \"Spanish\", \"affiliation\": \"USA/Canada\", \"visible\": true, \"open_seats\": null, \"price\": \"2000\", \"currency\": \"EUR\", \"status\": \"publish\", \"date_created\": \"2020-03-30T14:36:43\", \"date_created_gmt\": \"2020-03-30T18:36:43\", \"date_modified\": \"2020-05-12T09:57:08\", \"date_modified_gmt\": \"2020-05-12T13:57:08\" }"
                  } }
            };

            var recordAcks = new List <RecordAck>();

            // act
            client.PrepareWrite(prepareRequest);

            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();
        }