code: def test_get_artifact_url(self):
      remove_all_keys()
      fb = self.get_store("test_config.yaml")
      tmp_filename = os.path.join(
          tempfile.gettempdir(), str(uuid.uuid4()) + ".txt"
      )
  
      random_str = str(uuid.uuid4())
      with open(tmp_filename, "w") as f:
          f.write(random_str)
  
      artifact_key = "tests/test_" + str(uuid.uuid4())
      artifact = _build({"key": artifact_key})
      fb.put_artifact(artifact, tmp_filename)
      url = fb.get_artifact_url(artifact)
      os.remove(tmp_filename)
      response = requests.get(url)
      self.assertEqual(response.status_code, 200)
      tar_filename = os.path.join(
          tempfile.gettempdir(), str(uuid.uuid4()) + ".tgz"
      )
      with open(tar_filename, "wb") as f:
          f.write(response.content)
  
      ptar = subprocess.Popen(
          ["tar", "-xf", tar_filename], cwd=tempfile.gettempdir()
      )
  
      tarout, _ = ptar.communicate()
  
      with open(tmp_filename, "r") as f:
          self.assertEqual(f.read(), random_str)
  
      os.remove(tmp_filename)
      os.remove(tar_filename)
      fb.delete_artifact(artifact)
  
imports: import unittest
  import yaml
  import uuid
  import os
  import time
  import tempfile
  import shutil
  import requests
  import subprocess
  import boto3
  from studio import model
  from studio.auth import remove_all_keys
  from studio.artifacts.artifact import Artifact
  from studio.gcloud_artifact_store import GCloudArtifactStore
  from studio.storage.storage_handler import StorageHandler
  from studio.extra_util import has_aws_credentials
  from env_detect import on_gcp, on_aws
label_desc: Use image node_id 4 for calling the ArtifactStoreTest obj's underlying member method code with example usage: obj.test_get_artifact_url() without return types