|
8 | 8 | using LCT.Common.Constants; |
9 | 9 | using LCT.Common.Model; |
10 | 10 | using log4net; |
| 11 | +using log4net.Appender; |
11 | 12 | using NUnit.Framework; |
12 | 13 | using System; |
13 | 14 | using System.Collections.Generic; |
14 | 15 | using System.IO; |
15 | 16 | using System.Linq; |
| 17 | +using System.Reflection; |
16 | 18 | using System.Runtime.InteropServices; |
17 | 19 | using File = System.IO.File; |
18 | 20 |
|
@@ -1064,7 +1066,77 @@ public void ProcessInternalComponentIdentification_PreservesOriginalComponentDat |
1064 | 1066 | // Should have added one property (internal) to the existing empty list |
1065 | 1067 | Assert.AreEqual(1, processedComponent.Properties.Count); |
1066 | 1068 | } |
| 1069 | + [Test] |
| 1070 | + public void LogDuplicateComponentsByPurlId_LogsExpectedOutput_MemoryAppender() |
| 1071 | + { |
| 1072 | + // Arrange |
| 1073 | + var components = new List<Components> |
| 1074 | + { |
| 1075 | + new Components { Name = "CompA", Version = "1.0", ComponentId = "cid1" }, |
| 1076 | + new Components { Name = "CompB", Version = "2.0", ComponentId = "cid2" } |
| 1077 | + }; |
| 1078 | + string sw360Url = "http://sw360"; |
| 1079 | + |
| 1080 | + // Set up MemoryAppender |
| 1081 | + var memoryAppender = new MemoryAppender(); |
| 1082 | + var loggerField = typeof(CommonHelper).GetField("Logger", BindingFlags.Static | BindingFlags.NonPublic); |
| 1083 | + var logger = (ILog)loggerField.GetValue(null); |
| 1084 | + |
| 1085 | + // Attach the appender to the logger's repository |
| 1086 | + var log = LogManager.GetLogger(typeof(CommonHelper)); |
| 1087 | + ((log4net.Repository.Hierarchy.Logger)log.Logger).AddAppender(memoryAppender); |
| 1088 | + |
| 1089 | + // Act |
| 1090 | + var logMethod = typeof(CommonHelper).GetMethod("LogDuplicateComponentsByPurlId", BindingFlags.Static | BindingFlags.NonPublic); |
| 1091 | + Assert.IsNotNull(logMethod, "LogDuplicateComponentsByPurlId method not found in CommonHelper."); |
| 1092 | + logMethod.Invoke(null, new object[] { components, sw360Url }); |
| 1093 | + |
| 1094 | + // Get log events |
| 1095 | + var events = memoryAppender.GetEvents(); |
| 1096 | + var messages = events.Select(e => e.RenderedMessage).ToList(); |
| 1097 | + |
| 1098 | + // Assert |
| 1099 | + Assert.IsTrue(messages.Any(m => m.Contains("not created in SW360 due to Invalid Purl ids")), "Missing expected summary log."); |
| 1100 | + Assert.IsTrue(messages.Any(m => m.Contains("Component Name already exists in SW360")), "Missing expected warning log."); |
| 1101 | + Assert.IsTrue(messages.Any(m => m.Contains("CompA")), "Missing CompA in log."); |
| 1102 | + Assert.IsTrue(messages.Any(m => m.Contains("CompB")), "Missing CompB in log."); |
| 1103 | + Assert.IsTrue(messages.Any(m => m.Contains("http://sw360/group/guest/components/-/component/detail/cid1")), "Missing CompA URL in log."); |
| 1104 | + Assert.IsTrue(messages.Any(m => m.Contains("http://sw360/group/guest/components/-/component/detail/cid2")), "Missing CompB URL in log."); |
| 1105 | + |
| 1106 | + // Clean up |
| 1107 | + ((log4net.Repository.Hierarchy.Logger)log.Logger).RemoveAppender(memoryAppender); |
| 1108 | + } |
| 1109 | + |
| 1110 | + [Test] |
| 1111 | + public void LogDuplicateComponentsByPurlId_DoesNothing_WhenListIsEmpty_MemoryAppender() |
| 1112 | + { |
| 1113 | + // Arrange |
| 1114 | + var components = new List<Components>(); |
| 1115 | + string sw360Url = "http://sw360"; |
| 1116 | + |
| 1117 | + // Set up MemoryAppender |
| 1118 | + var memoryAppender = new MemoryAppender(); |
| 1119 | + var loggerField = typeof(CommonHelper).GetField("Logger", BindingFlags.Static | BindingFlags.NonPublic); |
| 1120 | + var logger = (ILog)loggerField.GetValue(null); |
| 1121 | + |
| 1122 | + // Attach the appender to the logger's repository |
| 1123 | + var log = LogManager.GetLogger(typeof(CommonHelper)); |
| 1124 | + ((log4net.Repository.Hierarchy.Logger)log.Logger).AddAppender(memoryAppender); |
1067 | 1125 |
|
| 1126 | + // Act |
| 1127 | + var logMethod = typeof(CommonHelper).GetMethod("LogDuplicateComponentsByPurlId", BindingFlags.Static | BindingFlags.NonPublic); |
| 1128 | + Assert.IsNotNull(logMethod, "LogDuplicateComponentsByPurlId method not found in CommonHelper."); |
| 1129 | + logMethod.Invoke(null, new object[] { components, sw360Url }); |
| 1130 | + |
| 1131 | + // Get log events |
| 1132 | + var events = memoryAppender.GetEvents(); |
| 1133 | + |
| 1134 | + // Assert |
| 1135 | + Assert.IsTrue(events.Length == 0 || events.All(e => string.IsNullOrWhiteSpace(e.RenderedMessage)), "No logs should be written when the list is empty."); |
| 1136 | + |
| 1137 | + // Clean up |
| 1138 | + ((log4net.Repository.Hierarchy.Logger)log.Logger).RemoveAppender(memoryAppender); |
| 1139 | + } |
1068 | 1140 |
|
1069 | 1141 | #region SetComponentPropertiesAndHashes Tests |
1070 | 1142 |
|
|
0 commit comments