def test_update_vrid_for_project_member_with_port_and_no_vrid(self):
     mock_vrid_entry = task.UpdateVRIDForProjectMember()
     mock_vrid_entry.vrid_repo = mock.Mock()
     mock_vrid_entry.execute(MEMBER_1, None, PORT)
     mock_vrid_entry.vrid_repo.create.assert_called_once_with(
         mock.ANY,
         project_id=MEMBER_1.project_id,
         vrid_floating_ip=PORT.fixed_ips[0].ip_address,
         vrid_port_id=PORT.id)
     mock_vrid_entry.vrid_repo.update.assert_not_called()
 def handle_vrid_for_member_subflow(self):
     handle_vrid_for_member_subflow = linear_flow.Flow(
         a10constants.HANDLE_VRID_MEMBER_SUBFLOW)
     handle_vrid_for_member_subflow.add(
         a10_database_tasks.GetVRIDForProjectMember(
             requires=constants.MEMBER, provides=a10constants.VRID))
     handle_vrid_for_member_subflow.add(
         a10_network_tasks.HandleVRIDFloatingIP(requires=[
             constants.MEMBER, a10constants.VTHUNDER, a10constants.VRID
         ],
                                                provides=a10constants.PORT))
     handle_vrid_for_member_subflow.add(
         a10_database_tasks.UpdateVRIDForProjectMember(requires=[
             constants.MEMBER, a10constants.VRID, a10constants.PORT
         ]))
     return handle_vrid_for_member_subflow
    def get_update_member_flow(self):
        """Create a flow to update a member

        :returns: The flow for updating a member
        """
        update_member_flow = linear_flow.Flow(constants.UPDATE_MEMBER_FLOW)
        update_member_flow.add(
            lifecycle_tasks.MemberToErrorOnRevertTask(requires=[
                constants.MEMBER, constants.LISTENERS, constants.LOADBALANCER,
                constants.POOL
            ]))
        update_member_flow.add(
            database_tasks.MarkMemberPendingUpdateInDB(
                requires=constants.MEMBER))
        update_member_flow.add(
            a10_database_tasks.GetVThunderByLoadBalancer(
                requires=constants.LOADBALANCER,
                provides=a10constants.VTHUNDER))
        # Handle VRID settings
        update_member_flow.add(
            a10_database_tasks.GetVRIDForProjectMember(
                requires=constants.MEMBER, provides=a10constants.VRID))
        update_member_flow.add(
            a10_network_tasks.HandleVRIDFloatingIP(requires=[
                constants.MEMBER, a10constants.VTHUNDER, a10constants.VRID
            ],
                                                   provides=a10constants.PORT))
        update_member_flow.add(
            a10_database_tasks.UpdateVRIDForProjectMember(requires=[
                constants.MEMBER, a10constants.VRID, a10constants.PORT
            ]))

        update_member_flow.add(
            server_tasks.MemberUpdate(requires=(constants.MEMBER,
                                                a10constants.VTHUNDER)))
        update_member_flow.add(
            database_tasks.UpdateMemberInDB(
                requires=[constants.MEMBER, constants.UPDATE_DICT]))
        update_member_flow.add(
            database_tasks.MarkMemberActiveInDB(requires=constants.MEMBER))
        update_member_flow.add(
            database_tasks.MarkPoolActiveInDB(requires=constants.POOL))
        update_member_flow.add(
            database_tasks.MarkLBAndListenersActiveInDB(
                requires=[constants.LOADBALANCER, constants.LISTENERS]))

        return update_member_flow
 def test_update_vrid_for_project_member_with_no_port(self):
     mock_vrid_entry = task.UpdateVRIDForProjectMember()
     mock_vrid_entry.vrid_repo = mock.Mock()
     mock_vrid_entry.execute(MEMBER_1, VRID, None)
     mock_vrid_entry.vrid_repo.update.assert_not_called()
     mock_vrid_entry.vrid_repo.create.assert_not_called()