11# Copyright (c) Microsoft Corporation. All rights reserved.
22# Licensed under the MIT License.
3+ import importlib .util
34import os
45import sys
5- import importlib .util
66import unittest
77from unittest .mock import patch
88
99from azure_functions_worker import testutils
10- from azure_functions_worker .utils .common import is_python_version
1110from azure_functions_worker .utils .dependency import DependencyManager
1211
1312
@@ -229,7 +228,7 @@ def test_add_to_sys_path_no_duplication(self):
229228
230229 def test_add_to_sys_path_import_module (self ):
231230 DependencyManager ._add_to_sys_path (self ._customer_deps_path , True )
232- import common_module # NoQA
231+ import common_module # NoQA
233232 self .assertEqual (
234233 common_module .package_location ,
235234 os .path .join (self ._customer_deps_path , 'common_module' )
@@ -240,7 +239,7 @@ def test_add_to_sys_path_import_namespace_path(self):
240239 into sys.path
241240 """
242241 DependencyManager ._add_to_sys_path (self ._customer_deps_path , True )
243- import common_namespace # NoQA
242+ import common_namespace # NoQA
244243 self .assertEqual (len (common_namespace .__path__ ), 1 )
245244 self .assertEqual (
246245 common_namespace .__path__ [0 ],
@@ -517,7 +516,7 @@ def test_clear_path_importer_cache_and_modules_retain_namespace(self):
517516 sys .path .insert (0 , self ._worker_deps_path )
518517
519518 # Ensure new import is from _worker_deps_path
520- import common_module as worker_mod # NoQA
519+ import common_module as worker_mod # NoQA
521520 self .assertIn ('common_module' , sys .modules )
522521 self .assertEqual (
523522 worker_mod .package_location ,
@@ -555,39 +554,6 @@ def test_use_worker_dependencies_disable(self):
555554 with self .assertRaises (ImportError ):
556555 import common_module # NoQA
557556
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-
591557 def test_prioritize_customer_dependencies (self ):
592558 # Setup app settings
593559 os .environ ['PYTHON_ISOLATE_WORKER_DEPENDENCIES' ] = 'true'
@@ -626,52 +592,51 @@ def test_prioritize_customer_dependencies_disable(self):
626592 with self .assertRaises (ImportError ):
627593 import common_module # NoQA
628594
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+
633598 # Setup paths
634599 DependencyManager .worker_deps_path = self ._worker_deps_path
635600 DependencyManager .cx_deps_path = self ._customer_deps_path
636601 DependencyManager .cx_working_dir = self ._customer_func_path
637602
638- # Ensure the common_module is imported from _customer_deps_path
603+ # Ensure the func_specific_module is imported from _customer_func_path
639604 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+ )
642610
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'
647613 # Setup paths
648614 DependencyManager .worker_deps_path = self ._worker_deps_path
649615 DependencyManager .cx_deps_path = self ._customer_deps_path
650616 DependencyManager .cx_working_dir = self ._customer_func_path
651617
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 )
654619 import common_module # NoQA
655620 self .assertEqual (
656621 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' ))
662623
624+ def test_reload_customer_libraries_dependency_isolation_false (self ):
625+ os .environ ['PYTHON_ISOLATE_WORKER_DEPENDENCIES' ] = 'false'
663626 # Setup paths
664627 DependencyManager .worker_deps_path = self ._worker_deps_path
665628 DependencyManager .cx_deps_path = self ._customer_deps_path
666629 DependencyManager .cx_working_dir = self ._customer_func_path
667630
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__ )
675640
676641 def test_remove_module_cache (self ):
677642 # First import the common_module and create a sys.modules cache
0 commit comments