@@ -19,7 +19,9 @@ def test_dag_tasks_present(self):
1919 self .assertEqual (self .tasks , [
2020 "harvest_oai" ,
2121 "create_collection" ,
22+ "list_index_files" ,
2223 "combine_index" ,
24+ "solr_commit" ,
2325 "solr_alias_swap" ,
2426 "success" ,
2527 ])
@@ -28,29 +30,45 @@ def test_dag_task_order(self):
2830 """Unit test that the DAG instance contains the expected dependencies."""
2931 expected_task_deps = {
3032 "create_collection" : ["harvest_oai" ],
31- "combine_index" : ["create_collection" ],
32- "solr_alias_swap" : ["combine_index" ],
33+ "list_index_files" : ["create_collection" ],
34+ "combine_index" : ["list_index_files" ],
35+ "solr_commit" : ["combine_index" ],
36+ "solr_alias_swap" : ["solr_commit" ],
3337 "success" : ["solr_alias_swap" ],
3438 }
3539
3640 for task , upstream_tasks in expected_task_deps .items ():
3741 upstream_list = [up_task .task_id for up_task in FCDAGDEV .get_task (task ).upstream_list ]
3842 self .assertCountEqual (upstream_tasks , upstream_list )
3943
44+ def test_list_index_files_task (self ):
45+ """Unit test that the DAG instance can list index files from S3."""
46+ task = FCDAGDEV .get_task ("list_index_files" )
47+ self .assertEqual (task .bucket , "{{ var.value.AIRFLOW_DATA_BUCKET }}" )
48+ self .assertEqual (task .prefix , "funcake_dev_index/{{ logical_date.strftime('%Y-%m-%d_%H-%M-%S') }}/new-updated/" )
49+ self .assertEqual (task .aws_conn_id , "AIRFLOW_S3" )
50+
4051 def test_combine_index_task (self ):
4152 """Unit test that the DAG instance can find required solr indexing bash script."""
4253 task = FCDAGDEV .get_task ("combine_index" )
4354 expected_bash_path = "{{ var.value.AIRFLOW_HOME }}/dags/funcake_dags/scripts/index.sh "
4455 self .assertEqual (task .bash_command , expected_bash_path )
4556 self .assertEqual (task .env ["AIRFLOW_HOME" ], "{{ var.value.AIRFLOW_HOME }}" )
4657 self .assertEqual (task .env ["BUCKET" ], "{{ var.value.AIRFLOW_DATA_BUCKET }}" )
47- self .assertEqual (task .env ["FOLDER " ], "funcake_dev_index/ {{ logical_date.strftime('%Y-%m-%d_%H-%M-%S ') }}/new-updated/ " )
58+ self .assertEqual (task .env ["DATA " ], "{{ ti.xcom_pull(task_ids='list_index_files ') | tojson }} " )
4859 self .assertEqual (task .env ["SOLR_URL" ], "{{ conn.get('SOLRCLOUD-WRITER').host if '://' in conn.get('SOLRCLOUD-WRITER').host else 'https://' + conn.get('SOLRCLOUD-WRITER').host }}/solr/{{ var.json.FUNCAKE_SOLR_CONFIG.configset }}-{{ logical_date.strftime('%Y-%m-%d_%H-%M-%S') }}" )
4960 self .assertEqual (task .env ["SOLR_AUTH_USER" ], "{{ conn.get('SOLRCLOUD-WRITER').login or '' }}" )
5061 self .assertEqual (task .env ["SOLR_AUTH_PASSWORD" ], "{{ conn.get('SOLRCLOUD-WRITER').password or '' }}" )
5162 self .assertEqual (task .env ["AWS_ACCESS_KEY_ID" ], "{{ conn.get('AIRFLOW_S3').login }}" )
5263 self .assertEqual (task .env ["AWS_SECRET_ACCESS_KEY" ], "{{ conn.get('AIRFLOW_S3').password }}" )
5364
65+ def test_solr_commit_task (self ):
66+ """Unit test that the DAG instance includes a final Solr commit."""
67+ task = FCDAGDEV .get_task ("solr_commit" )
68+ self .assertEqual (task .http_conn_id , "SOLRCLOUD-WRITER" )
69+ self .assertEqual (task .method , "GET" )
70+ self .assertEqual (task .endpoint , "/solr/{{ var.json.FUNCAKE_SOLR_CONFIG.configset }}-{{ logical_date.strftime('%Y-%m-%d_%H-%M-%S') }}/update?commit=true" )
71+
5472
5573class TestFuncakeProdIndexDAG (unittest .TestCase ):
5674 """Primary Class for Testing the FunCake Solr Index DAG."""
@@ -68,7 +86,9 @@ def test_dag_tasks_present(self):
6886 self .assertEqual (self .tasks , [
6987 "harvest_oai" ,
7088 "create_collection" ,
89+ "list_index_files" ,
7190 "combine_index" ,
91+ "solr_commit" ,
7292 "solr_alias_swap" ,
7393 "success" ,
7494 ])
@@ -77,25 +97,41 @@ def test_dag_task_order(self):
7797 """Unit test that the DAG instance contains the expected dependencies."""
7898 expected_task_deps = {
7999 "create_collection" : ["harvest_oai" ],
80- "combine_index" : ["create_collection" ],
81- "solr_alias_swap" : ["combine_index" ],
100+ "list_index_files" : ["create_collection" ],
101+ "combine_index" : ["list_index_files" ],
102+ "solr_commit" : ["combine_index" ],
103+ "solr_alias_swap" : ["solr_commit" ],
82104 "success" : ["solr_alias_swap" ],
83105 }
84106
85107 for task , upstream_tasks in expected_task_deps .items ():
86108 upstream_list = [up_task .task_id for up_task in FCDAGPROD .get_task (task ).upstream_list ]
87109 self .assertCountEqual (upstream_tasks , upstream_list )
88110
111+ def test_list_index_files_task (self ):
112+ """Unit test that the DAG instance can list index files from S3."""
113+ task = FCDAGPROD .get_task ("list_index_files" )
114+ self .assertEqual (task .bucket , "{{ var.value.AIRFLOW_DATA_BUCKET }}" )
115+ self .assertEqual (task .prefix , "funcake_prod_index/{{ logical_date.strftime('%Y-%m-%d_%H-%M-%S') }}/new-updated/" )
116+ self .assertEqual (task .aws_conn_id , "AIRFLOW_S3" )
117+
89118 def test_combine_index_task (self ):
90119 """Unit test that the DAG instance can find required solr indexing bash script."""
91120 task = FCDAGPROD .get_task ("combine_index" )
92121 expected_bash_path = "{{ var.value.AIRFLOW_HOME }}/dags/funcake_dags/scripts/index.sh "
93122 self .assertEqual (task .bash_command , expected_bash_path )
94123 self .assertEqual (task .env ["AIRFLOW_HOME" ], "{{ var.value.AIRFLOW_HOME }}" )
95124 self .assertEqual (task .env ["BUCKET" ], "{{ var.value.AIRFLOW_DATA_BUCKET }}" )
96- self .assertEqual (task .env ["FOLDER " ], "funcake_prod_index/ {{ logical_date.strftime('%Y-%m-%d_%H-%M-%S ') }}/new-updated/ " )
125+ self .assertEqual (task .env ["DATA " ], "{{ ti.xcom_pull(task_ids='list_index_files ') | tojson }} " )
97126 self .assertEqual (task .env ["SOLR_URL" ], "{{ conn.get('SOLRCLOUD-WRITER').host if '://' in conn.get('SOLRCLOUD-WRITER').host else 'https://' + conn.get('SOLRCLOUD-WRITER').host }}/solr/{{ var.json.FUNCAKE_SOLR_CONFIG.configset }}-{{ logical_date.strftime('%Y-%m-%d_%H-%M-%S') }}" )
98127 self .assertEqual (task .env ["SOLR_AUTH_USER" ], "{{ conn.get('SOLRCLOUD-WRITER').login or '' }}" )
99128 self .assertEqual (task .env ["SOLR_AUTH_PASSWORD" ], "{{ conn.get('SOLRCLOUD-WRITER').password or '' }}" )
100129 self .assertEqual (task .env ["AWS_ACCESS_KEY_ID" ], "{{ conn.get('AIRFLOW_S3').login }}" )
101130 self .assertEqual (task .env ["AWS_SECRET_ACCESS_KEY" ], "{{ conn.get('AIRFLOW_S3').password }}" )
131+
132+ def test_solr_commit_task (self ):
133+ """Unit test that the DAG instance includes a final Solr commit."""
134+ task = FCDAGPROD .get_task ("solr_commit" )
135+ self .assertEqual (task .http_conn_id , "SOLRCLOUD-WRITER" )
136+ self .assertEqual (task .method , "GET" )
137+ self .assertEqual (task .endpoint , "/solr/{{ var.json.FUNCAKE_SOLR_CONFIG.configset }}-{{ logical_date.strftime('%Y-%m-%d_%H-%M-%S') }}/update?commit=true" )
0 commit comments