public void TailWebSockerError()
        {
            using (ShimsContext.Create())
            {
                var errorEvent      = default(EventHandler <ErrorEventArgs>);
                var errorEventFired = new ManualResetEvent(false);

                ShimLoggregatorWebSocket.AllInstances.ErrorReceivedAddEventHandlerOfErrorEventArgs = (@this, h) => errorEvent = h;
                ShimLoggregatorWebSocket.AllInstances.OpenUriStringUriBoolean = (@this, appLogEndpoint, authenticationToken, proxy, skipCertValidation) => { };

                LoggregatorLog loggregator = new LoggregatorLog(loggregatorEndpoint, string.Empty);
                loggregator.ErrorReceived += delegate(object sender, ErrorEventArgs e)
                {
                    Assert.AreEqual("Test error", e.Error.Message);
                    errorEventFired.Set();
                };

                loggregator.Tail(Guid.NewGuid().ToString());

                errorEvent(this, new ErrorEventArgs()
                {
                    Error = new LoggregatorException("Test error")
                });

                Assert.IsTrue(errorEventFired.WaitOne(100));
            }
        }
        public void TailWebSocketMessage()
        {
            using (ShimsContext.Create())
            {
                var openEvent         = default(EventHandler <EventArgs>);
                var messageEvent      = default(EventHandler <DataEventArgs>);
                var messageEventFired = new ManualResetEvent(false);

                ApplicationLog msg = new ApplicationLog();
                msg.AppId          = Guid.NewGuid().ToString();
                msg.Message        = "This is a log entry";
                msg.LogMessageType = ApplicationLogMessageType.Output;

                ShimLoggregatorWebSocket.AllInstances.StreamOpenedAddEventHandlerOfEventArgs     = (@this, h) => openEvent = h;
                ShimLoggregatorWebSocket.AllInstances.DataReceivedAddEventHandlerOfDataEventArgs = (@this, h) => messageEvent = h;
                ShimLoggregatorWebSocket.AllInstances.OpenUriStringUriBoolean = (@this, appLogEndpoint, authenticationToken, proxy, skipCertValidation) => { };

                LoggregatorLog loggregator = new LoggregatorLog(loggregatorEndpoint, string.Empty);
                loggregator.MessageReceived += delegate(object sender, MessageEventArgs e)
                {
                    Assert.AreEqual(msg, e.LogMessage);
                    messageEventFired.Set();
                };

                loggregator.Tail(msg.AppId);

                messageEvent(this, new DataEventArgs()
                {
                    Data = msg
                });
                Assert.IsTrue(messageEventFired.WaitOne(100));
            }
        }
        public void TailWebSocketOpen()
        {
            using (ShimsContext.Create())
            {
                var openEvent      = default(EventHandler <EventArgs>);
                var state          = ConnectionState.None;
                var openEventFired = new ManualResetEvent(false);

                ShimLoggregatorWebSocket.AllInstances.StreamOpenedAddEventHandlerOfEventArgs = (@this, h) => openEvent = h;
                ShimLoggregatorWebSocket.AllInstances.StateGet = (@this) => { return(state); };
                ShimLoggregatorWebSocket.AllInstances.OpenUriStringUriBoolean = (@this, appLogEndpoint, authenticationToken, proxy, skipCertValidation) => { state = ConnectionState.Open; };

                LoggregatorLog loggregator = new LoggregatorLog(loggregatorEndpoint, string.Empty);
                loggregator.StreamOpened += delegate(object sender, EventArgs e)
                {
                    openEventFired.Set();
                };

                loggregator.Tail(Guid.NewGuid().ToString());
                openEvent(this, EventArgs.Empty);

                Assert.IsTrue(openEventFired.WaitOne(100));
                Assert.AreEqual(loggregator.State, ConnectionState.Open);
            }
        }
        public void StopTailTest()
        {
            using (ShimsContext.Create())
            {
                var closedEvent      = default(EventHandler <EventArgs>);
                var closedEventFired = new ManualResetEvent(false);

                ShimLoggregatorWebSocket.AllInstances.StreamClosedAddEventHandlerOfEventArgs = (@this, h) => closedEvent = h;
                ShimLoggregatorWebSocket.AllInstances.OpenUriStringUriBoolean = (@this, appLogEndpoint, authenticationToken, proxy, skipCertValidation) => { };
                ShimLoggregatorWebSocket.AllInstances.Close = (@this) =>
                {
                    closedEvent(this, EventArgs.Empty);
                };
                ShimLoggregatorWebSocket.AllInstances.Dispose = (@this) => { };

                LoggregatorLog loggregator = new LoggregatorLog(loggregatorEndpoint, string.Empty);
                loggregator.StreamClosed += delegate(object sender, EventArgs e)
                {
                    closedEventFired.Set();
                };

                loggregator.Tail(Guid.NewGuid().ToString());
                loggregator.StopLogStream();

                Assert.IsTrue(closedEventFired.WaitOne(100));
                Assert.AreEqual(ConnectionState.None, loggregator.State);
            }
        }
Ejemplo n.º 5
0
        public void LoggregatorRecentTest()
        {
            CreateAppResponse app = client.Apps.CreateApp(apprequest).Result;

            Guid appGuid = app.EntityMetadata.Guid;

            client.Apps.Push(appGuid, tempAppPath, true).Wait();

            while (true)
            {
                var appSummary   = client.Apps.GetAppSummary(appGuid).Result;
                var packageState = appSummary.PackageState.ToLowerInvariant();

                if (packageState != "pending")
                {
                    Assert.AreEqual("staged", packageState);

                    var instances = client.Apps.GetInstanceInformationForStartedApp(appGuid).Result;

                    if (instances.Count > 0)
                    {
                        if (instances[0].State.ToLower() == "running")
                        {
                            break;
                        }
                    }
                }
            }

            if (client.Info.GetInfo().Result.LoggingEndpoint == null)
            {
                Assert.Inconclusive("CloudFoundry target does not have a loggregator endpoint");
            }

            var logClient = new LoggregatorLog(
                new Uri(client.Info.GetInfo().Result.LoggingEndpoint),
                string.Format("bearer {0}", client.AuthorizationToken),
                null,
                true);

            // Just wait a bit to get the latest logs
            Thread.Sleep(1000);

            var appLogs = logClient.Recent(appGuid.ToString(), CancellationToken.None).Result;

            var conatainsPushedContent = appLogs.Any((line) => line.Message.Contains("dummy content"));

            Assert.IsTrue(conatainsPushedContent, "Pushed content was not dumped in the output stream: {0}", string.Join(Environment.NewLine, appLogs.Select(x => x.Message)));

            var conatainsEnvContent = appLogs.Any((line) => line.Message.Contains("envtest1234"));

            Assert.IsTrue(conatainsEnvContent, "Pushed env variable was not dumped in the output stream: {0}", string.Join(Environment.NewLine, appLogs.Select(x => x.Message)));

            client.Apps.DeleteApp(appGuid).Wait();
            Directory.Delete(tempAppPath, true);
        }
        public void TailNullAppIdTest()
        {
            using (ShimsContext.Create())
            {
                ShimLoggregatorWebSocket.AllInstances.OpenUriStringUriBoolean = (@this, appLogEndpoint, authenticationToken, proxy, skipCertValidation) => { };

                LoggregatorLog loggregator = new LoggregatorLog(loggregatorEndpoint, string.Empty);

                try
                {
                    loggregator.Tail(null);
                }
                catch (Exception ex)
                {
                    Assert.IsInstanceOfType(ex, typeof(ArgumentNullException));
                }
            }
        }
        public void TailTwiceTest()
        {
            using (ShimsContext.Create())
            {
                ShimLoggregatorWebSocket.AllInstances.OpenUriStringUriBoolean = (@this, appLogEndpoint, authenticationToken, proxy, skipCertValidation) => { };

                LoggregatorLog loggregator = new LoggregatorLog(loggregatorEndpoint, string.Empty);

                string appGuid = Guid.NewGuid().ToString();
                loggregator.Tail(appGuid);
                try
                {
                    loggregator.Tail(appGuid);
                }
                catch (Exception ex)
                {
                    Assert.IsInstanceOfType(ex, typeof(InvalidOperationException));
                    Assert.IsTrue(ex.Message.Contains("The log stream has already been started."));
                }
            }
        }
Ejemplo n.º 8
0
        public void LoggregatorTailTest()
        {
            CreateAppResponse app = client.Apps.CreateApp(apprequest).Result;

            Guid appGuid = app.EntityMetadata.Guid;

            if (client.Info.GetInfo().Result.LoggingEndpoint == null)
            {
                Assert.Inconclusive("CloudFoundry target does not have a loggregator endpoint");
            }

            var logClient = new LoggregatorLog(
                new Uri(client.Info.GetInfo().Result.LoggingEndpoint),
                string.Format("bearer {0}", client.AuthorizationToken),
                null,
                true);

            var logs = new List <string>();

            logClient.MessageReceived += delegate(object sender, MessageEventArgs e)
            {
                long timeInMilliSeconds = e.LogMessage.Timestamp / 1000 / 1000;
                var  logTimeStamp       = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(timeInMilliSeconds);

                logs.Add(String.Format("[{0}] - {1}: {2}", e.LogMessage.SourceName, logTimeStamp.ToString(), e.LogMessage.Message));
            };


            logClient.ErrorReceived += delegate(object sender, CloudFoundry.Loggregator.Client.ErrorEventArgs e)
            {
                Assert.Fail("Loggregator error: {0}", e.Error.ToString());
            };

            logClient.Tail(appGuid.ToString());

            client.Apps.Push(appGuid, tempAppPath, true).Wait();

            while (true)
            {
                var appSummary   = client.Apps.GetAppSummary(appGuid).Result;
                var packageState = appSummary.PackageState.ToLowerInvariant();

                if (packageState != "pending")
                {
                    Assert.AreEqual("staged", packageState);

                    var instances = client.Apps.GetInstanceInformationForStartedApp(appGuid).Result;

                    if (instances.Count > 0)
                    {
                        if (instances[0].State.ToLower() == "running")
                        {
                            break;
                        }
                    }
                }
            }

            // Just wait a bit to get the latest logs
            Thread.Sleep(1000);

            logClient.StopLogStream();

            var conatainsPushedContent = logs.Any((line) => line.Contains("dummy content"));

            Assert.IsTrue(conatainsPushedContent, "Pushed content was not dumped in the output stream: {0}", string.Join(Environment.NewLine, logs));

            var conatainsEnvContent = logs.Any((line) => line.Contains("envtest1234"));

            Assert.IsTrue(conatainsEnvContent, "Pushed env variable was not dumped in the output stream: {0}", string.Join(Environment.NewLine, logs));

            client.Apps.DeleteApp(appGuid).Wait();
            Directory.Delete(tempAppPath, true);
        }