1
1
# Copyright (c) Microsoft Corporation. All rights reserved.
2
2
# Licensed under the MIT License.
3
+ import importlib .util
3
4
import os
4
5
import sys
5
- import importlib .util
6
6
import unittest
7
7
from unittest .mock import patch
8
8
9
9
from azure_functions_worker import testutils
10
- from azure_functions_worker .utils .common import is_python_version
11
10
from azure_functions_worker .utils .dependency import DependencyManager
12
11
13
12
@@ -229,7 +228,7 @@ def test_add_to_sys_path_no_duplication(self):
229
228
230
229
def test_add_to_sys_path_import_module (self ):
231
230
DependencyManager ._add_to_sys_path (self ._customer_deps_path , True )
232
- import common_module # NoQA
231
+ import common_module # NoQA
233
232
self .assertEqual (
234
233
common_module .package_location ,
235
234
os .path .join (self ._customer_deps_path , 'common_module' )
@@ -240,7 +239,7 @@ def test_add_to_sys_path_import_namespace_path(self):
240
239
into sys.path
241
240
"""
242
241
DependencyManager ._add_to_sys_path (self ._customer_deps_path , True )
243
- import common_namespace # NoQA
242
+ import common_namespace # NoQA
244
243
self .assertEqual (len (common_namespace .__path__ ), 1 )
245
244
self .assertEqual (
246
245
common_namespace .__path__ [0 ],
@@ -517,7 +516,7 @@ def test_clear_path_importer_cache_and_modules_retain_namespace(self):
517
516
sys .path .insert (0 , self ._worker_deps_path )
518
517
519
518
# Ensure new import is from _worker_deps_path
520
- import common_module as worker_mod # NoQA
519
+ import common_module as worker_mod # NoQA
521
520
self .assertIn ('common_module' , sys .modules )
522
521
self .assertEqual (
523
522
worker_mod .package_location ,
@@ -555,39 +554,6 @@ def test_use_worker_dependencies_disable(self):
555
554
with self .assertRaises (ImportError ):
556
555
import common_module # NoQA
557
556
558
- @unittest .skipUnless (
559
- sys .version_info .major == 3 and sys .version_info .minor != 10 ,
560
- 'Test only available for Python 3.6, 3.7, 3.8 or 3.9'
561
- )
562
- def test_use_worker_dependencies_default_python_36_37_38_39 (self ):
563
- # Feature should be disabled in Python 3.6, 3.7, 3.8 and 3.9
564
- # Setup paths
565
- DependencyManager .worker_deps_path = self ._worker_deps_path
566
- DependencyManager .cx_deps_path = self ._customer_deps_path
567
- DependencyManager .cx_working_dir = self ._customer_func_path
568
-
569
- # The common_module cannot be imported since feature is disabled
570
- DependencyManager .use_worker_dependencies ()
571
- with self .assertRaises (ImportError ):
572
- import common_module # NoQA
573
-
574
- @unittest .skip ('Skipping since PYTHON_ISOLATE_WORKER_DEPENDENCIES is '
575
- 'disabled by default' )
576
- def test_use_worker_dependencies_default_python_310 (self ):
577
- # Feature should be enabled in Python 3.10 by default
578
- # Setup paths
579
- DependencyManager .worker_deps_path = self ._worker_deps_path
580
- DependencyManager .cx_deps_path = self ._customer_deps_path
581
- DependencyManager .cx_working_dir = self ._customer_func_path
582
-
583
- # Ensure the common_module is imported from _worker_deps_path
584
- DependencyManager .use_worker_dependencies ()
585
- import common_module # NoQA
586
- self .assertEqual (
587
- common_module .package_location ,
588
- os .path .join (self ._worker_deps_path , 'common_module' )
589
- )
590
-
591
557
def test_prioritize_customer_dependencies (self ):
592
558
# Setup app settings
593
559
os .environ ['PYTHON_ISOLATE_WORKER_DEPENDENCIES' ] = 'true'
@@ -626,52 +592,51 @@ def test_prioritize_customer_dependencies_disable(self):
626
592
with self .assertRaises (ImportError ):
627
593
import common_module # NoQA
628
594
629
- @unittest .skipIf (is_python_version ('3.10' ),
630
- 'Test not available for python 3.10' )
631
- def test_prioritize_customer_dependencies_default_python_36_37_38_39 (self ):
632
- # Feature should be disabled in Python 3.6, 3.7, 3.8 and 3.9
595
+ def test_prioritize_customer_dependencies_from_working_directory (self ):
596
+ self ._initialize_scenario ()
597
+
633
598
# Setup paths
634
599
DependencyManager .worker_deps_path = self ._worker_deps_path
635
600
DependencyManager .cx_deps_path = self ._customer_deps_path
636
601
DependencyManager .cx_working_dir = self ._customer_func_path
637
602
638
- # Ensure the common_module is imported from _customer_deps_path
603
+ # Ensure the func_specific_module is imported from _customer_func_path
639
604
DependencyManager .prioritize_customer_dependencies ()
640
- with self .assertRaises (ImportError ):
641
- import common_module # NoQA
605
+ import func_specific_module # NoQA
606
+ self .assertEqual (
607
+ func_specific_module .package_location ,
608
+ os .path .join (self ._customer_func_path , 'func_specific_module' )
609
+ )
642
610
643
- @unittest .skip ('Skipping since PYTHON_ISOLATE_WORKER_DEPENDENCIES is '
644
- 'disabled by default' )
645
- def test_prioritize_customer_dependencies_default_python_310 (self ):
646
- # Feature should be enabled in Python 3.10 by default
611
+ def test_reload_customer_libraries_dependency_isolation_true (self ):
612
+ os .environ ['PYTHON_ISOLATE_WORKER_DEPENDENCIES' ] = 'true'
647
613
# Setup paths
648
614
DependencyManager .worker_deps_path = self ._worker_deps_path
649
615
DependencyManager .cx_deps_path = self ._customer_deps_path
650
616
DependencyManager .cx_working_dir = self ._customer_func_path
651
617
652
- # Ensure the common_module is imported from _customer_deps_path
653
- DependencyManager .prioritize_customer_dependencies ()
618
+ DependencyManager .reload_customer_libraries (self ._customer_deps_path )
654
619
import common_module # NoQA
655
620
self .assertEqual (
656
621
common_module .package_location ,
657
- os .path .join (self ._customer_deps_path , 'common_module' )
658
- )
659
-
660
- def test_prioritize_customer_dependencies_from_working_directory (self ):
661
- self ._initialize_scenario ()
622
+ os .path .join (self ._customer_deps_path , 'common_module' ))
662
623
624
+ def test_reload_customer_libraries_dependency_isolation_false (self ):
625
+ os .environ ['PYTHON_ISOLATE_WORKER_DEPENDENCIES' ] = 'false'
663
626
# Setup paths
664
627
DependencyManager .worker_deps_path = self ._worker_deps_path
665
628
DependencyManager .cx_deps_path = self ._customer_deps_path
666
629
DependencyManager .cx_working_dir = self ._customer_func_path
667
630
668
- # Ensure the func_specific_module is imported from _customer_func_path
669
- DependencyManager .prioritize_customer_dependencies ()
670
- import func_specific_module # NoQA
671
- self .assertEqual (
672
- func_specific_module .package_location ,
673
- os .path .join (self ._customer_func_path , 'func_specific_module' )
674
- )
631
+ DependencyManager ._add_to_sys_path (self ._worker_deps_path , True )
632
+ import azure .functions # NoQA
633
+
634
+ DependencyManager ._add_to_sys_path (self ._customer_deps_path , True )
635
+ DependencyManager .reload_customer_libraries (self ._customer_deps_path )
636
+ # Checking if azure.functions gets reloaded
637
+ self .assertIn (
638
+ os .path .join (self ._customer_deps_path , 'azure' , 'functions' ),
639
+ sys .modules ['azure.functions' ].__path__ )
675
640
676
641
def test_remove_module_cache (self ):
677
642
# First import the common_module and create a sys.modules cache
0 commit comments