package xyz.docbleach.module.ole2; import org.apache.poi.hpsf.SummaryInformation; import org.apache.poi.poifs.filesystem.Entry; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import xyz.docbleach.api.BleachSession; import xyz.docbleach.api.BleachTestBase; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.*; class MacroRemoverTest { private MacroRemover instance; private BleachSession session; @BeforeEach void setUp() { session = mock(BleachSession.class); instance = spy(new MacroRemover(session)); } @Test void testRemovesMacro() { Entry entry = mock(Entry.class); doReturn("_VBA_PROJECT_CUR").when(entry).getName(); assertFalse(instance.test(entry), "A macro entry should not be copied over"); BleachTestBase.assertThreatsFound(session, 1); reset(session); } @Test void testKeepsEverythingElse() { Entry entry = mock(Entry.class); doReturn(SummaryInformation.DEFAULT_STREAM_NAME).when(entry).getName(); assertTrue(instance.test(entry), "Non-macro streams should be ignored"); BleachTestBase.assertThreatsFound(session, 0); reset(session); doReturn("RandomName").when(entry).getName(); assertTrue(instance.test(entry), "Non-macro streams should be ignored"); BleachTestBase.assertThreatsFound(session, 0); reset(session); } @Test void recognizesMacros() { assertTrue(instance.isMacro("_VBA_PROJECT_CUR"), "_VBA_PROJECT_CUR is the Excel Macro directory"); assertFalse(instance.isMacro("Nothing"), "Nothing is not a macro. Is-it?"); } }