package org.ovirt.engine.core.bll.adbroker;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import java.util.ArrayList;
import java.util.List;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
public class AbstractLdapTest {
private boolean validProvider = false;
protected void setup() throws Exception {
validProvider = false;
}
protected void setValidProvider(boolean value) {
validProvider = value;
}
protected DirContext mockDirContext(final List<SearchResult> searchResults)
throws NamingException {
DirContext dirContext = mock(DirContext.class);
doAnswer(new Answer<NamingEnumeration<SearchResult>>() {
@Override
public NamingEnumeration<SearchResult> answer(InvocationOnMock invocation) throws Throwable {
if (!validProvider) {
throw new NamingException("LDAP provider is invalid");
}
NamingEnumeration<SearchResult> result = createNamingEnumeration(searchResults);
return result;
}
}).when(dirContext).search(any(String.class), any(String.class), any(SearchControls.class));
return dirContext;
}
protected DirContext mockDirContext() throws NamingException {
Attributes attributes = new BasicAttributes();
attributes.put("namingContexts", "DC=example,DC=com");
final List<SearchResult> searchResults = new ArrayList<SearchResult>();
searchResults.add(new SearchResult("1", "dummy", attributes));
searchResults.add(new SearchResult("2", "dummy2", attributes));
searchResults.add(new SearchResult("3", "dummy3", attributes));
return mockDirContext(searchResults);
}
protected NamingEnumeration<SearchResult> createNamingEnumeration(final List<SearchResult> searchResults) {
return new NamingEnumeration<SearchResult>() {
private int index = 0;
@Override
public boolean hasMoreElements() {
return index < searchResults.size();
}
@Override
public SearchResult nextElement() {
return searchResults.get(index++);
}
@Override
public SearchResult next() throws NamingException {
return nextElement();
}
@Override
public boolean hasMore() throws NamingException {
return hasMoreElements();
}
@Override
public void close() throws NamingException {
}
};
}
}