SessionConfInterpreter extends ConfInterpreter { @Override public InterpreterResult interpret(String st, InterpreterContext context) throws InterpreterException { try { Properties finalProperties = new Properties(); finalProperties.putAll(this.properties); Properties updatedProperties = new Properties(); updatedProperties.load(new StringReader(st)); finalProperties.putAll(updatedProperties); LOGGER.debug("Properties for Session: " + sessionId + ": " + finalProperties); List<Interpreter> interpreters = interpreterSetting.getInterpreterGroup(interpreterGroupId).get(sessionId); for (Interpreter intp : interpreters) { if (intp instanceof RemoteInterpreter) { RemoteInterpreter remoteInterpreter = (RemoteInterpreter) intp; if (remoteInterpreter.isOpened()) { return new InterpreterResult(InterpreterResult.Code.ERROR, "Can not change interpreter session properties after this session is started"); } remoteInterpreter.setProperties(finalProperties); } } return new InterpreterResult(InterpreterResult.Code.SUCCESS); } catch (IOException e) { LOGGER.error("Fail to update interpreter setting", e); return new InterpreterResult(InterpreterResult.Code.ERROR, ExceptionUtils.getStackTrace(e)); } } SessionConfInterpreter(Properties properties,
                                String sessionId,
                                String interpreterGroupId,
                                InterpreterSetting interpreterSetting); @Override InterpreterResult interpret(String st, InterpreterContext context);  }
@Test public void testUserSessionConfInterpreter() throws InterpreterException { InterpreterSetting mockInterpreterSetting = mock(InterpreterSetting.class); ManagedInterpreterGroup mockInterpreterGroup = mock(ManagedInterpreterGroup.class); when(mockInterpreterSetting.getInterpreterGroup("group_1")).thenReturn(mockInterpreterGroup); Properties properties = new Properties(); properties.setProperty("property_1", "value_1"); properties.setProperty("property_2", "value_2"); SessionConfInterpreter confInterpreter = new SessionConfInterpreter( properties, "session_1", "group_1", mockInterpreterSetting); RemoteInterpreter remoteInterpreter = new RemoteInterpreter(properties, "session_1", "clasName", "user1"); List<Interpreter> interpreters = new ArrayList<>(); interpreters.add(confInterpreter); interpreters.add(remoteInterpreter); when(mockInterpreterGroup.get("session_1")).thenReturn(interpreters); InterpreterResult result = confInterpreter.interpret("property_1\tupdated_value_1\nproperty_3\tvalue_3", mock(InterpreterContext.class)); assertEquals(InterpreterResult.Code.SUCCESS, result.code); assertEquals(3, remoteInterpreter.getProperties().size()); assertEquals("updated_value_1", remoteInterpreter.getProperty("property_1")); assertEquals("value_2", remoteInterpreter.getProperty("property_2")); assertEquals("value_3", remoteInterpreter.getProperty("property_3")); remoteInterpreter.setOpened(true); result = confInterpreter.interpret("property_1\tupdated_value_1\nproperty_3\tvalue_3", mock(InterpreterContext.class)); assertEquals(InterpreterResult.Code.ERROR, result.code); }