1919
2020import static org .apache .hadoop .hdds .protocol .proto .HddsProtos .LifeCycleState .CLOSED ;
2121import static org .apache .hadoop .ozone .OzoneConfigKeys .OZONE_READONLY_ADMINISTRATORS ;
22+ import static org .apache .hadoop .ozone .upgrade .UpgradeFinalization .Status .ALREADY_FINALIZED ;
2223import static org .junit .jupiter .api .Assertions .assertEquals ;
2324import static org .junit .jupiter .api .Assertions .assertFalse ;
2425import static org .junit .jupiter .api .Assertions .assertThrows ;
2526import static org .junit .jupiter .api .Assertions .assertTrue ;
2627import static org .mockito .ArgumentMatchers .any ;
2728import static org .mockito .Mockito .mock ;
29+ import static org .mockito .Mockito .never ;
30+ import static org .mockito .Mockito .verify ;
2831import static org .mockito .Mockito .when ;
2932
3033import java .io .File ;
4851import org .apache .hadoop .hdds .scm .pipeline .PipelineID ;
4952import org .apache .hadoop .hdds .scm .protocol .StorageContainerLocationProtocolServerSideTranslatorPB ;
5053import org .apache .hadoop .hdds .scm .safemode .SCMSafeModeManager ;
54+ import org .apache .hadoop .hdds .scm .server .upgrade .FinalizationManager ;
55+ import org .apache .hadoop .hdds .scm .server .upgrade .ScmVersionManager ;
5156import org .apache .hadoop .hdds .utils .ProtocolMessageMetrics ;
5257import org .apache .hadoop .ozone .container .common .SCMTestUtils ;
58+ import org .apache .hadoop .ozone .upgrade .UpgradeFinalization .StatusAndMessages ;
5359import org .apache .hadoop .security .AccessControlException ;
5460import org .apache .hadoop .security .UserGroupInformation ;
55- import org .junit .jupiter .api .AfterEach ;
61+ import org .junit .jupiter .api .AfterAll ;
62+ import org .junit .jupiter .api .BeforeAll ;
5663import org .junit .jupiter .api .BeforeEach ;
5764import org .junit .jupiter .api .Test ;
5865import org .junit .jupiter .api .io .TempDir ;
6269 * servicing commands from the scm client.
6370 */
6471public class TestSCMClientProtocolServer {
65- private SCMClientProtocolServer server ;
66- private StorageContainerManager scm ;
67- private StorageContainerLocationProtocolServerSideTranslatorPB service ;
68- private SCMSafeModeManager mockSafeModeManager ;
69-
70- @ BeforeEach
71- void setUp (@ TempDir File testDir ) throws Exception {
72+ private static SCMClientProtocolServer server ;
73+ private static StorageContainerManager scm ;
74+ private static StorageContainerLocationProtocolServerSideTranslatorPB service ;
75+ private static SCMSafeModeManager mockSafeModeManager ;
76+
77+ @ BeforeAll
78+ static void setUp (@ TempDir File testDir ) throws Exception {
7279 OzoneConfiguration config = SCMTestUtils .getConf (testDir );
7380
7481 mockSafeModeManager = mock (SCMSafeModeManager .class );
75- when (mockSafeModeManager .getInSafeMode ()).thenReturn (false );
7682
7783 SCMConfigurator configurator = new SCMConfigurator ();
7884 configurator .setSCMHAManager (SCMHAManagerStub .getInstance (true ));
@@ -87,8 +93,13 @@ void setUp(@TempDir File testDir) throws Exception {
8793 scm , mock (ProtocolMessageMetrics .class ));
8894 }
8995
90- @ AfterEach
91- public void tearDown () throws Exception {
96+ @ BeforeEach
97+ void setUp () {
98+ when (mockSafeModeManager .getInSafeMode ()).thenReturn (false );
99+ }
100+
101+ @ AfterAll
102+ public static void tearDown () throws Exception {
92103 if (scm != null ) {
93104 scm .stop ();
94105 scm .join ();
@@ -181,6 +192,47 @@ private StorageContainerManager mockStorageContainerManager() {
181192 return storageContainerManager ;
182193 }
183194
195+ @ Test
196+ public void testLegacyFinalizeScmUpgradeAlreadyFinalized () throws Exception {
197+ FinalizationManager mockFinalizationManager = mock (FinalizationManager .class );
198+ SCMClientProtocolServer testServer = serverWithMockFinalization (false , mockFinalizationManager );
199+ try {
200+ StatusAndMessages result = testServer .finalizeScmUpgrade ("testClientID" );
201+ assertEquals (ALREADY_FINALIZED , result .status ());
202+ assertTrue (result .msgs ().isEmpty ());
203+ verify (mockFinalizationManager , never ()).finalizeUpgrade ();
204+ } finally {
205+ testServer .stop ();
206+ }
207+ }
208+
209+ @ Test
210+ public void testLegacyFinalizeScmUpgradeFinalizationRequired () throws Exception {
211+ FinalizationManager mockFinalizationManager = mock (FinalizationManager .class );
212+ SCMClientProtocolServer testServer = serverWithMockFinalization (true , mockFinalizationManager );
213+ try {
214+ StatusAndMessages result = testServer .finalizeScmUpgrade ("testClientID" );
215+ assertEquals (ALREADY_FINALIZED , result .status ());
216+ assertTrue (result .msgs ().isEmpty ());
217+ verify (mockFinalizationManager , never ()).finalizeUpgrade ();
218+ } finally {
219+ testServer .stop ();
220+ }
221+ }
222+
223+ private SCMClientProtocolServer serverWithMockFinalization (
224+ boolean needsFinalization , FinalizationManager finalizationManager ) throws IOException {
225+ ScmVersionManager mockVersionManager = mock (ScmVersionManager .class );
226+ when (mockVersionManager .needsFinalization ()).thenReturn (needsFinalization );
227+
228+ StorageContainerManager mockScm = mockStorageContainerManager ();
229+ when (mockScm .getVersionManager ()).thenReturn (mockVersionManager );
230+ when (mockScm .getFinalizationManager ()).thenReturn (finalizationManager );
231+
232+ return new SCMClientProtocolServer (
233+ new OzoneConfiguration (), mockScm , mock (ReconfigurationHandler .class ));
234+ }
235+
184236 @ Test
185237 public void testQueryUpgradeStatus () throws Exception {
186238 HddsProtos .UpgradeStatus status = server .queryUpgradeStatus ();
0 commit comments