code: def test_write_datasource(ray_start_regular_shared):
      output = DummyOutputDatasource()
      ds = ray.data.range(10, parallelism=2)
      ds.write_datasource(output)
      assert output.num_ok == 1
      assert output.num_failed == 0
      assert ray.get(output.data_sink.get_rows_written.remote()) == 10
  
      output.enabled = False
      ds = ray.data.range(10, parallelism=2)
      with pytest.raises(ValueError):
          ds.write_datasource(
              output, ray_remote_args={"max_retries": 0}
          )
      assert output.num_ok == 1
      assert output.num_failed == 1
      assert ray.get(output.data_sink.get_rows_written.remote()) == 10
  
imports: import os
  from typing import Iterable, List
  import pandas
  import pyarrow
  import pyarrow.parquet
  import pytest
  import torchvision
  from fsspec.implementations.http import HTTPFileSystem
  from fsspec.implementations.local import LocalFileSystem
  import ray
  from ray._private.test_utils import wait_for_condition
  from ray.data._internal.execution.interfaces import TaskContext
  from ray.data.block import Block, BlockAccessor
  from ray.data.datasource import Datasource, DummyOutputDatasource, WriteResult
  from ray.data.datasource.file_meta_provider import _handle_read_os_error
  from ray.data.tests.conftest import *
  from ray.data.tests.mock_http_server import *
  from ray.data.tests.util import extract_values
  from ray.tests.conftest import *
  from ray.types import ObjectRef
label_desc: Use image node_id 9 for calling a global function with example usage: test_write_datasource(ray_start_regular_shared) without return types