Skip to content

Commit

Permalink
feat: [HIG-112] delete account without store (#417)
Browse files Browse the repository at this point in the history
  • Loading branch information
sonersivri authored Jan 5, 2024
1 parent 4ef605f commit f895f0b
Show file tree
Hide file tree
Showing 6 changed files with 65 additions and 8 deletions.
4 changes: 1 addition & 3 deletions Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,6 @@ pipeline {
steps {

mvnCmd("$BUILD_PROPERTIES_PARAMS test -Dexcludegroups=api")

publishCoverage adapters: [jacocoAdapter(mergeToOneReport: true, path: '**/target/site/jacoco/jacoco.xml')], calculateDiffForChangeRequests: true, failNoReports: true
junit allowEmptyResults: true, testResults: '**/target/surefire-reports/*.xml'
}
}
Expand All @@ -140,7 +138,7 @@ pipeline {
}
}
steps {
publishCoverage adapters: [jacocoAdapter(mergeToOneReport: true, path: '**/target/site/jacoco/jacoco.xml')], calculateDiffForChangeRequests: true, failNoReports: true
recordCoverage(tools: [[parser: 'JACOCO']],sourceCodeRetention: 'MODIFIED')
junit allowEmptyResults: true, testResults: '**/target/surefire-reports/*.xml'
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.zimbra.cs.account;

public interface ProvisioningCache {

void removeFromCache(Entry entry);
}
6 changes: 2 additions & 4 deletions store/src/main/java/com/zimbra/cs/account/ldap/LdapProv.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import com.zimbra.common.service.ServiceException;
import com.zimbra.cs.account.Account;
import com.zimbra.cs.account.Domain;
import com.zimbra.cs.account.Entry;
import com.zimbra.cs.account.ProvisioningCache;
import com.zimbra.cs.account.Provisioning;
import com.zimbra.cs.account.auth.AuthMechanism.AuthMech;
import com.zimbra.cs.ldap.LdapClient;
Expand All @@ -24,7 +24,7 @@
/**
* @author pshao
*/
public abstract class LdapProv extends Provisioning {
public abstract class LdapProv extends Provisioning implements ProvisioningCache {

protected LdapDIT mDIT;
protected LdapHelper helper;
Expand Down Expand Up @@ -122,8 +122,6 @@ public abstract void externalLdapAuth(
public abstract void zimbraLdapAuthenticate(
Account acct, String password, Map<String, Object> authCtxt) throws ServiceException;

public abstract void removeFromCache(Entry entry);

@TODO // deprecate
public abstract void searchLdapOnMaster(
String base, String filter, String[] returnAttrs, SearchLdapOptions.SearchLdapVisitor visitor)
Expand Down
17 changes: 17 additions & 0 deletions store/src/main/java/com/zimbra/cs/mailbox/Mailbox.java
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
import com.zimbra.cs.account.DataSource;
import com.zimbra.cs.account.Domain;
import com.zimbra.cs.account.Provisioning;
import com.zimbra.cs.account.ProvisioningCache;
import com.zimbra.cs.account.Server;
import com.zimbra.cs.account.ShareLocator;
import com.zimbra.cs.datasource.DataSourceManager;
Expand Down Expand Up @@ -2663,6 +2664,22 @@ public void deleteMailbox(DeleteBlobs deleteBlobs) throws ServiceException {
}
}

/**
* mark mailbox deleted
* @throws ServiceException
*/
public void markMailboxDeleted() throws ServiceException {
MailboxManager.getInstance().markMailboxDeleted(this);
Provisioning provisioning = Provisioning.getInstance();
if (provisioning instanceof ProvisioningCache) {
String accountId = getAccountId();
Account acct = Provisioning.getInstance().get(AccountBy.id, accountId);
if (acct != null) {
((ProvisioningCache) provisioning).removeFromCache(acct);
}
}
}

public void renameMailbox(String oldName, String newName) throws ServiceException {
renameMailbox(null, oldName, newName);
}
Expand Down
11 changes: 10 additions & 1 deletion store/src/test/java/com/zimbra/cs/account/MockProvisioning.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
*
* @author ysasaki
*/
public final class MockProvisioning extends Provisioning {
public final class MockProvisioning extends Provisioning implements ProvisioningCache {
public static final String DEFAULT_ACCOUNT_ID = new UUID(0L, 0L).toString();

private final Map<String, Account> id2account = Maps.newHashMap();
Expand Down Expand Up @@ -951,4 +951,13 @@ public void resetPassword(Account acct, String newPassword, boolean dryRun)
throws ServiceException {
throw ServiceException.UNSUPPORTED();
}

@Override
public void removeFromCache(Entry entry) {
if (entry instanceof Account) {
id2account.remove(((Account) entry).getId());
} else {
throw new UnsupportedOperationException();
}
}
}
29 changes: 29 additions & 0 deletions store/src/test/java/com/zimbra/cs/mailbox/MailboxTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.zimbra.common.mailbox.ContactConstants;
import com.zimbra.common.mime.InternetAddress;
import com.zimbra.cs.account.Account;
import com.zimbra.cs.account.AccountServiceException;
import com.zimbra.cs.account.MockProvisioning;
import com.zimbra.cs.account.Provisioning;
import com.zimbra.cs.index.BrowseTerm;
Expand All @@ -31,6 +32,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.junit.jupiter.api.*;

/**
Expand Down Expand Up @@ -272,6 +274,33 @@ void trimTombstones() throws Exception {
mbox.getTombstones(changeId3).isEmpty(), "sync token matches last purged tombstone");
}

@Test
void test_markMailboxDeleted_deletes_account_when_account_exists() throws Exception {
Account acct = Provisioning.getInstance().getAccount("test@zimbra.com");
MailboxManager mailboxManager = MailboxManager.getInstance();
Mailbox mbox = mailboxManager.getMailboxByAccount(acct);
mbox.markMailboxDeleted();
AccountServiceException thrown = assertThrows(
AccountServiceException.class,
() -> mailboxManager.getMailboxByAccountId(acct.getId())
);
assertEquals(AccountServiceException.NO_SUCH_ACCOUNT, thrown.getCode());
}

@Test
void test_markMailboxDeleted_is_ok_when_account_does_not_exists() throws Exception {
Account acct = Provisioning.getInstance().getAccount("test@zimbra.com");
MailboxManager mailboxManager = MailboxManager.getInstance();
Mailbox mbox = mailboxManager.getMailboxByAccount(acct);
mbox.markMailboxDeleted();
mbox.markMailboxDeleted();
AccountServiceException thrown = assertThrows(
AccountServiceException.class,
() -> mailboxManager.getMailboxByAccountId(acct.getId())
);
assertEquals(AccountServiceException.NO_SUCH_ACCOUNT, thrown.getCode());
}

static class MockListener extends MailboxListener {
/**
* Information on creations/modifications and deletions seen since {@link clear} was last called
Expand Down

0 comments on commit f895f0b

Please sign in to comment.