Project

General

Profile

« Previous | Next » 

Revision 6d6b201f

Added by Andreas Kohlbecker about 6 years ago

ref #7347 introducing DataPortalContextProviders, DataPortalsListContextProvider reads config from system property 'SiteListUrl'

View differences:

src/main/java/eu/etaxonomy/dataportal/junit/DataPortalContextSuite.java
8 8
import java.lang.annotation.Retention;
9 9
import java.lang.annotation.RetentionPolicy;
10 10
import java.lang.annotation.Target;
11
import java.net.MalformedURLException;
12
import java.net.URL;
11 13
import java.util.ArrayList;
12 14
import java.util.Collections;
13 15
import java.util.List;
......
21 23
import org.junit.runners.model.Statement;
22 24

  
23 25
import eu.etaxonomy.dataportal.DataPortalContext;
26
import eu.etaxonomy.dataportal.DataPortalContextProvider;
24 27
import eu.etaxonomy.dataportal.DataPortalSite;
28
import eu.etaxonomy.dataportal.DataPortalSiteContextProvider;
29
import eu.etaxonomy.dataportal.DataPortalsListContextProvider;
25 30

  
26 31

  
27 32
/**
......
30 35
 */
31 36
public class DataPortalContextSuite extends Suite{
32 37

  
38
    public static final String SYSTEM_PROPERTY_SITE_LIST_URL = "SiteListUrl";
39

  
33 40
	/**
34 41
	 * Only to be used for test classes which extend {@link CdmDataPortalTestBase}
35 42
	 *
......
39 46
	@Target(ElementType.TYPE)
40 47
	@Inherited
41 48
	public @interface DataPortalContexts {
49

  
42 50
		/**
43 51
		 * @return an array of DataPortalSite to which the annotated test
44 52
		 *         class is applicable
45 53
		 */
46
		DataPortalSite[] value();
54
		DataPortalSite[] value() default {};
55

  
56
		/**
57
		 * Alternative configuration option to the default {@link #value()}.
58
		 *
59
		 * In case this mode is active the system property <code>SiteListUrl</code> must contain a URL which
60
		 * points to a resource containing a list of Data Portals base URLs to be tested. Each dataportal URL must be in a
61
		 * separate line of the text returned by the URL in <code>SiteListUrl</code.
62
		 */
63
		boolean siteListUrl() default false;
47 64
	}
48 65

  
49 66
	private final List<Runner> runners = new ArrayList<Runner>();
......
103 120
	public DataPortalContextSuite(Class<?> klass) throws InitializationError {
104 121
		super(klass, Collections.<Runner>emptyList());
105 122
		DataPortalContexts dataPortalContextsAnotation = getTestClass().getJavaClass().getAnnotation(DataPortalContexts.class);
106
		for (DataPortalSite dataPortalSite : dataPortalContextsAnotation.value()) {
107
			runners.add(new TestClassRunnerWithDataPortalContext(klass, dataPortalSite.getContext()));
123
		DataPortalContextProvider contextProvider = null;
124

  
125
		if(dataPortalContextsAnotation.siteListUrl()){
126
            String siteListUrlString = System.getProperty(SYSTEM_PROPERTY_SITE_LIST_URL);
127
            if(System.getProperty(SYSTEM_PROPERTY_SITE_LIST_URL) == null) {
128
                throw new RuntimeException("The system property " + SYSTEM_PROPERTY_SITE_LIST_URL + " must be set if 'siteListUrl' is enabled");
129
            }
130
            try {
131
                contextProvider = new DataPortalsListContextProvider(new URL(siteListUrlString));
132
            } catch (MalformedURLException e) {
133
                throw new RuntimeException("Error parsing the provided URL", e);
134
            }
135
		} else {
136
		    contextProvider = new DataPortalSiteContextProvider(dataPortalContextsAnotation.value());
137
		}
138

  
139
		assert contextProvider != null;
140
		for (DataPortalContext dataPortalContext : contextProvider.contexts()) {
141
		    runners.add(new TestClassRunnerWithDataPortalContext(klass, dataPortalContext));
108 142
		}
109 143
	}
110 144

  

Also available in: Unified diff