code: def test_configs_with_different_app_names(self):
      config1 = ServeDeploySchema(
          applications=[
              ServeApplicationSchema(
                  name="app1",
                  import_path="fake.import",
                  route_prefix="/app1",
              ),
              ServeApplicationSchema(
                  name="app2",
                  import_path="fake.import2",
                  route_prefix="/app2",
              ),
              ServeApplicationSchema(
                  name="app3",
                  import_path="fake.import3",
                  route_prefix="/app3",
              ),
          ],
      )
  
      # Configs contain apps with different names but same import paths.
      config2 = deepcopy(config1)
      config2.applications[0].name = "different_app1"
      assert applications_match(config1, config2) is False
  
      # Configs contain different number of apps.
      config2 = deepcopy(config1)
      config2.applications.pop()
      assert applications_match(config1, config2) is False
  
file_path: ray/python/ray/serve/tests/unit/test_controller.py
imports: from copy import deepcopy
  import pytest
  from ray.serve._private.common import TargetCapacityDirection
  from ray.serve._private.controller import applications_match, calculate_target_capacity_direction
  from ray.serve.schema import HTTPOptionsSchema, ServeApplicationSchema, ServeDeploySchema
label_desc: Use image node_id 3 for calling the TestApplicationsMatch obj's underlying member method code with example usage: obj.test_configs_with_different_app_names() without return types