use of com.sforce.soap.partner.fault.LoginFault in project components by Talend.
the class SalesforceSessionReuseTestIT method testUseExistingConnection.
@Ignore("Need to solve test failed randomly")
@Test(timeout = 30_000)
public void testUseExistingConnection() throws Throwable {
File sessionFolder = new File(tempFolder.getRoot().getPath() + "/tsalesforceconnection_1/");
assertEquals(0, sessionFolder.getTotalSpace());
LOGGER.debug("session folder: " + sessionFolder.getAbsolutePath());
SalesforceConnectionProperties connProps = (SalesforceConnectionProperties) getComponentService().getComponentProperties(TSalesforceConnectionDefinition.COMPONENT_NAME);
setupProps(connProps, !ADD_QUOTES);
// setup session function
connProps.reuseSession.setValue(true);
connProps.sessionDirectory.setValue(sessionFolder.getAbsolutePath());
final String currentComponentName = TSalesforceConnectionDefinition.COMPONENT_NAME + "_1";
final java.util.Map<String, Object> globalMap = new java.util.HashMap<String, Object>();
RuntimeContainer connContainer = new DefaultComponentRuntimeContainerImpl() {
@Override
public String getCurrentComponentId() {
return currentComponentName;
}
@Override
public Object getComponentData(String componentId, String key) {
return globalMap.get(componentId + "_" + key);
}
@Override
public void setComponentData(String componentId, String key, Object data) {
globalMap.put(componentId + "_" + key, data);
}
@Override
public Object getGlobalData(String key) {
return globalMap.get(key);
}
};
// 1. salesforce connection would save the session to a session file
SalesforceSourceOrSink salesforceSourceOrSink = new SalesforceSourceOrSink();
salesforceSourceOrSink.initialize(connContainer, connProps);
assertEquals(ValidationResult.Result.OK, salesforceSourceOrSink.validate(connContainer).getStatus());
// 2. set a wrong pwd to connection properties
connProps.userPassword.password.setValue(WRONG_PWD);
// Input component get connection from the tSalesforceConnection
TSalesforceInputProperties inProps = (TSalesforceInputProperties) getComponentService().getComponentProperties(TSalesforceInputDefinition.COMPONENT_NAME);
inProps.connection.referencedComponent.componentInstanceId.setValue(currentComponentName);
inProps.connection.referencedComponent.setReference(connProps);
checkAndAfter(inProps.connection.referencedComponent.getReference().getForm(Form.REFERENCE), "referencedComponent", inProps.connection);
ComponentTestUtils.checkSerialize(inProps, errorCollector);
assertEquals(2, inProps.getForms().size());
Form f = inProps.module.getForm(Form.REFERENCE);
assertTrue(f.getWidget("moduleName").isCallBeforeActivate());
ComponentProperties moduleProps = (ComponentProperties) f.getProperties();
try {
// 3. input components would be get connection from connection session file
moduleProps = (ComponentProperties) PropertiesTestUtils.checkAndBeforeActivate(getComponentService(), f, "moduleName", moduleProps);
Object connection = connContainer.getComponentData(currentComponentName, SalesforceSourceOrSink.KEY_CONNECTION);
assertNotNull(connection);
((PartnerConnection) connection).getConfig().setPassword(WRONG_PWD);
// Check whether the session disable by other test.
((PartnerConnection) connection).getUserInfo();
Property<?> prop = (Property<?>) f.getWidget("moduleName").getContent();
assertTrue(prop.getPossibleValues().size() > 100);
LOGGER.debug(moduleProps.getValidationResult().toString());
assertEquals(ValidationResult.Result.OK, moduleProps.getValidationResult().getStatus());
invalidSession(connProps, null);
// This means that the session is disabled by current test
// 4. invalid the session, then the session should be renew based on reference connection information(wrong pwd)
// connect would be fail
moduleProps = (ComponentProperties) PropertiesTestUtils.checkAndBeforeActivate(getComponentService(), f, "moduleName", moduleProps);
assertEquals(ValidationResult.Result.ERROR, moduleProps.getValidationResult().getStatus());
LOGGER.debug(moduleProps.getValidationResult().toString());
} catch (ConnectionException e) {
// Maybe get exception when same account run in parallel
// The session maybe disabled by other test
assertThat(e, instanceOf(LoginFault.class));
assertEquals(ExceptionCode.INVALID_LOGIN, ((LoginFault) e).getExceptionCode());
LOGGER.debug("session is disabled by other test!");
}
// 5.set correct pwd back
setupProps(connProps, !ADD_QUOTES);
moduleProps = (ComponentProperties) PropertiesTestUtils.checkAndBeforeActivate(getComponentService(), f, "moduleName", moduleProps);
assertEquals(ValidationResult.Result.OK, moduleProps.getValidationResult().getStatus());
LOGGER.debug(moduleProps.getValidationResult().toString());
}
use of com.sforce.soap.partner.fault.LoginFault in project components by Talend.
the class SalesforceSessionReuseTestIT method testOutputReuseSession.
@Ignore("Need to solve test failed randomly")
@Test(timeout = 30_000)
public void testOutputReuseSession() throws Throwable {
File sessionFolder = new File(tempFolder.getRoot().getPath() + "/tsalesforceoutput/");
assertEquals(0, sessionFolder.getTotalSpace());
LOGGER.debug("session folder: " + sessionFolder.getAbsolutePath());
// $NON-NLS-1$
TSalesforceOutputProperties props = (TSalesforceOutputProperties) new TSalesforceOutputProperties("foo").init();
props.module.moduleName.setValue(EXISTING_MODULE_NAME);
props.module.main.schema.setValue(getMakeRowSchema(false));
props.connection = setupProps(null, !ADD_QUOTES);
// setup session function
props.connection.reuseSession.setValue(true);
props.connection.sessionDirectory.setValue(sessionFolder.getAbsolutePath());
// Init session
assertEquals(ValidationResult.Result.OK, testConnection(props).getStatus());
assertNotEquals(0, sessionFolder.getTotalSpace());
// Invalid session, test whether it can be renew the session
invalidSession(props.connection, null);
// length=260
String invalidName = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
List<IndexedRecord> records = new ArrayList<>();
IndexedRecord r1 = new GenericData.Record(props.module.main.schema.getValue());
r1.put(0, invalidName);
records.add(r1);
try {
doWriteRows(props, records);
} catch (IOException e) {
// means exception caused by "Name" too long
assertTrue(e.getMessage().contains(invalidName));
LOGGER.debug("expect exception: " + e.getMessage());
}
// Set wrong pwd to test reuse session from session folder
props.connection.userPassword.password.setValue(WRONG_PWD);
try {
doWriteRows(props, records);
} catch (IOException e) {
Throwable caused = e.getCause();
if (caused != null && caused instanceof LoginFault) {
// Maybe throw exception when same account run in parallel
// The session maybe disabled by other test
assertEquals(ExceptionCode.INVALID_LOGIN, ((LoginFault) caused).getExceptionCode());
LOGGER.debug("session is disabled by other test!");
} else {
// means exception caused by "Name" too long
assertTrue(e.getMessage().contains(invalidName));
LOGGER.debug("expect exception: " + e.getMessage());
// This means that the session not disabled by other test
invalidSession(props.connection, null);
// This means that the session is disabled by current test
}
}
// Test reuse session fails with wrong pwd
try {
doWriteRows(props, records);
} catch (IOException e) {
Throwable caused = e.getCause();
// Should login fails with wrong pwd
assertThat(caused, instanceOf(LoginFault.class));
assertEquals(ExceptionCode.INVALID_LOGIN, ((LoginFault) caused).getExceptionCode());
LOGGER.debug("expect login fails: " + e.getMessage());
}
// Disable reuse session function
props.connection.reuseSession.setValue(false);
LOGGER.debug("expect login fails:");
assertEquals(ValidationResult.Result.ERROR, testConnection(props).getStatus());
}
use of com.sforce.soap.partner.fault.LoginFault in project components by Talend.
the class SalesforceSessionReuseTestIT method testInputReuseSession.
/*
* If the logic changes for this test please specify appropriate timeout.
* The average execution time for this test 3.2-4.7 sec.
*/
@Test(timeout = 40_000)
public void testInputReuseSession() throws Throwable {
File sessionFolder = new File(tempFolder.getRoot().getPath() + "/tsalesforceinput/");
assertEquals(0, sessionFolder.getTotalSpace());
LOGGER.debug("session folder: " + sessionFolder.getAbsolutePath());
// $NON-NLS-1$
TSalesforceInputProperties props = (TSalesforceInputProperties) new TSalesforceInputProperties("foo").init();
props.module.moduleName.setValue(EXISTING_MODULE_NAME);
props.module.main.schema.setValue(getMakeRowSchema(false));
props.connection = setupProps(null, !ADD_QUOTES);
// setup session function
props.connection.reuseSession.setValue(true);
props.connection.sessionDirectory.setValue(sessionFolder.getAbsolutePath());
// Init session
assertEquals(ValidationResult.Result.OK, testConnection(props).getStatus());
assertNotEquals(0, sessionFolder.getTotalSpace());
// Invalid session, test whether it can be renew the session
invalidSession(props.connection, null);
List<IndexedRecord> records = readRows(props);
assertNotNull(records);
LOGGER.debug("current records number in module " + EXISTING_MODULE_NAME + ": " + records.size());
assertNotEquals(0, records.size());
// Set wrong pwd to test reuse session from session folder
props.connection.userPassword.password.setValue(WRONG_PWD);
try {
testConnection(props);
records = readRows(props);
assertNotNull(records);
LOGGER.debug("current records number in module " + EXISTING_MODULE_NAME + ": " + records.size());
assertNotEquals(0, records.size());
// Test reuse session fails with wrong pwd
invalidSession(props.connection, null);
// This means that the session is disabled by current test
} catch (IOException e) {
Throwable caused = e.getCause();
// Maybe get exception when same account run in parallel
// The session maybe disabled by other test
assertThat(caused, instanceOf(LoginFault.class));
assertEquals(ExceptionCode.INVALID_LOGIN, ((LoginFault) caused).getExceptionCode());
LOGGER.debug("session is disabled by other test!");
}
try {
readRows(props);
} catch (IOException e) {
Throwable caused = e.getCause();
// Should login fails with wrong pwd
assertThat(caused, instanceOf(LoginFault.class));
assertEquals(ExceptionCode.INVALID_LOGIN, ((LoginFault) caused).getExceptionCode());
LOGGER.debug("expect login fails: " + e.getMessage());
}
// Disable reuse session function
props.connection.reuseSession.setValue(false);
LOGGER.debug("expect login fails:");
assertEquals(ValidationResult.Result.ERROR, testConnection(props).getStatus());
}
use of com.sforce.soap.partner.fault.LoginFault in project components by Talend.
the class SalesforceSourceOrSinkTestIT method testSalesForcePasswordExpired.
@Test(expected = ConnectionException.class)
public void testSalesForcePasswordExpired() throws ConnectionException {
SalesforceSourceOrSink salesforceSourceOrSink = new SalesforceSourceOrSink();
TSalesforceInputProperties properties = (TSalesforceInputProperties) new TSalesforceInputProperties(null).init();
salesforceSourceOrSink.initialize(null, properties);
ConnectorConfig config = new ConnectorConfig();
config.setUsername(StringUtils.strip(USER_ID_EXPIRED, "\""));
String password = StringUtils.strip(PASSWORD_EXPIRED, "\"");
String securityKey = StringUtils.strip(SECURITY_KEY_EXPIRED, "\"");
if (StringUtils.isNotEmpty(securityKey)) {
password = password + securityKey;
}
config.setPassword(password);
PartnerConnection connection = null;
try {
connection = salesforceSourceOrSink.doConnection(config, true);
} catch (LoginFault ex) {
Assert.fail("Must be an exception related to expired password, not the Login Fault.");
} finally {
if (null != connection) {
connection.logout();
}
}
}
use of com.sforce.soap.partner.fault.LoginFault in project pentaho-kettle by pentaho.
the class SalesforceConnection method connect.
public void connect() throws KettleException {
ConnectorConfig config = new ConnectorConfig();
config.setAuthEndpoint(getURL());
config.setServiceEndpoint(getURL());
config.setUsername(getUsername());
config.setPassword(getPassword());
config.setCompression(isUsingCompression());
config.setManualLogin(true);
String proxyUrl = System.getProperty("http.proxyHost", null);
if (StringUtils.isNotEmpty(proxyUrl)) {
int proxyPort = Integer.parseInt(System.getProperty("http.proxyPort", "80"));
String proxyUser = System.getProperty("http.proxyUser", null);
String proxyPassword = Encr.decryptPasswordOptionallyEncrypted(System.getProperty("http.proxyPassword", null));
config.setProxy(proxyUrl, proxyPort);
config.setProxyUsername(proxyUser);
config.setProxyPassword(proxyPassword);
}
// Set timeout
if (getTimeOut() > 0) {
if (log.isDebug()) {
log.logDebug(BaseMessages.getString(PKG, "SalesforceInput.Log.SettingTimeout", "" + this.timeout));
}
config.setConnectionTimeout(getTimeOut());
config.setReadTimeout(getTimeOut());
}
try {
PartnerConnection pConnection = createBinding(config);
if (log.isDetailed()) {
log.logDetailed(BaseMessages.getString(PKG, "SalesforceInput.Log.LoginURL", config.getAuthEndpoint()));
}
if (isRollbackAllChangesOnError()) {
// Set the SOAP header to rollback all changes
// unless all records are processed successfully.
pConnection.setAllOrNoneHeader(true);
}
// Attempt the login giving the user feedback
if (log.isDetailed()) {
log.logDetailed(BaseMessages.getString(PKG, "SalesforceInput.Log.LoginNow"));
log.logDetailed("----------------------------------------->");
log.logDetailed(BaseMessages.getString(PKG, "SalesforceInput.Log.LoginURL", getURL()));
log.logDetailed(BaseMessages.getString(PKG, "SalesforceInput.Log.LoginUsername", getUsername()));
if (getModule() != null) {
log.logDetailed(BaseMessages.getString(PKG, "SalesforceInput.Log.LoginModule", getModule()));
}
log.logDetailed("<-----------------------------------------");
}
// Login
this.loginResult = pConnection.login(config.getUsername(), Encr.decryptPasswordOptionallyEncrypted(config.getPassword()));
if (log.isDebug()) {
log.logDebug(BaseMessages.getString(PKG, "SalesforceInput.Log.SessionId") + " : " + this.loginResult.getSessionId());
log.logDebug(BaseMessages.getString(PKG, "SalesforceInput.Log.NewServerURL") + " : " + this.loginResult.getServerUrl());
}
// Create a new session header object and set the session id to that
// returned by the login
pConnection.setSessionHeader(loginResult.getSessionId());
config.setServiceEndpoint(loginResult.getServerUrl());
// Return the user Infos
this.userInfo = pConnection.getUserInfo();
if (log.isDebug()) {
log.logDebug(BaseMessages.getString(PKG, "SalesforceInput.Log.UserInfos") + " : " + this.userInfo.getUserFullName());
log.logDebug("----------------------------------------->");
log.logDebug(BaseMessages.getString(PKG, "SalesforceInput.Log.UserName") + " : " + this.userInfo.getUserFullName());
log.logDebug(BaseMessages.getString(PKG, "SalesforceInput.Log.UserEmail") + " : " + this.userInfo.getUserEmail());
log.logDebug(BaseMessages.getString(PKG, "SalesforceInput.Log.UserLanguage") + " : " + this.userInfo.getUserLanguage());
log.logDebug(BaseMessages.getString(PKG, "SalesforceInput.Log.UserOrganization") + " : " + this.userInfo.getOrganizationName());
log.logDebug("<-----------------------------------------");
}
this.serverTimestamp = pConnection.getServerTimestamp().getTimestamp().getTime();
if (log.isDebug()) {
BaseMessages.getString(PKG, "SalesforceInput.Log.ServerTimestamp", getServerTimestamp());
}
if (log.isDetailed()) {
log.logDetailed(BaseMessages.getString(PKG, "SalesforceInput.Log.Connected"));
}
} catch (LoginFault ex) {
// The LoginFault derives from AxisFault
ExceptionCode exCode = ex.getExceptionCode();
if (exCode == ExceptionCode.FUNCTIONALITY_NOT_ENABLED || exCode == ExceptionCode.INVALID_CLIENT || exCode == ExceptionCode.INVALID_LOGIN || exCode == ExceptionCode.LOGIN_DURING_RESTRICTED_DOMAIN || exCode == ExceptionCode.LOGIN_DURING_RESTRICTED_TIME || exCode == ExceptionCode.ORG_LOCKED || exCode == ExceptionCode.PASSWORD_LOCKOUT || exCode == ExceptionCode.SERVER_UNAVAILABLE || exCode == ExceptionCode.TRIAL_EXPIRED || exCode == ExceptionCode.UNSUPPORTED_CLIENT) {
throw new KettleException(BaseMessages.getString(PKG, "SalesforceInput.Error.InvalidUsernameOrPassword"));
}
throw new KettleException(BaseMessages.getString(PKG, "SalesforceInput.Error.Connection"), ex);
} catch (Exception e) {
throw new KettleException(BaseMessages.getString(PKG, "SalesforceInput.Error.Connection"), e);
}
}
Aggregations