Example #1
0
    def test_generates_and_saves_random_value(self):
        val1 = run_tiltfile_func("tilt_env/Tiltfile",
                                 "tilt_env_get_or_random",
                                 key="test1")
        assert val1 is not None

        val2 = run_tiltfile_func("tilt_env/Tiltfile",
                                 "tilt_env_get_or_random",
                                 key="test1")
        assert val1 == val2

        val3 = run_tiltfile_func("tilt_env/Tiltfile",
                                 "tilt_env_get_or_random",
                                 key="test2")
        assert val1 != val3
Example #2
0
def test_doesnt_assign_post_install_deps_when_no_dependencies():
    k8s_resource = Mock()
    run_tiltfile_func("helm_hooks/Tiltfile",
                      "helm_install_handle_hooks",
                      mocks={'k8s_resource': k8s_resource},
                      yaml="""
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dave
  namespace: test
  annotations:
    helm.sh/hook: post-install
""")

    assert k8s_resource.call_count == 0
Example #3
0
def test_errors_on_delete_hooks():
    fail = Mock()
    run_tiltfile_func("helm_hooks/Tiltfile",
                      "helm_install_handle_hooks",
                      mocks={'fail': fail},
                      yaml="""
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dave3
  namespace: test
  annotations:
    helm.sh/hook: pre-delete
""")

    assert fail.called
def test_delegates_to_local_resource_when_not_tilt_down():
    local_resource = Mock()
    on_destroy = Mock()
    run_tiltfile_func("local_resource_ext/Tiltfile",
                      "local_resource_ext",
                      mocks={'local_resource': local_resource},
                      name="my_resource",
                      cmd="something",
                      on_destroy=on_destroy,
                      random="kwarg")

    assert local_resource.call_count == 1
    local_resource.assert_called_with("my_resource",
                                      "something",
                                      random="kwarg")
    assert on_destroy.call_count == 0
    def test_noop_on_second_run(self):
        bucket_name = run_tiltfile_func(
            "local_resource_ext/Tiltfile",
            "s3_bucket",
            mocks={'local_resource': local_resource_integration},
            resource_name="my_bucket",
        )

        bucket_name2 = run_tiltfile_func(
            "local_resource_ext/Tiltfile",
            "s3_bucket",
            mocks={'local_resource': local_resource_integration},
            resource_name="my_bucket",
        )

        assert bucket_name == bucket_name2
        s3.meta.client.head_bucket(Bucket=bucket_name)
def test_executes_on_destroy_when_tilt_down():
    local_resource = Mock()
    on_destroy = Mock()

    run_tiltfile_func("local_resource_ext/Tiltfile",
                      "local_resource_ext",
                      mocks={
                          'local_resource': local_resource,
                          'config': TiltConfig('down')
                      },
                      name="my_resource",
                      cmd="something",
                      on_destroy=on_destroy,
                      random="kwarg")

    assert local_resource.call_count == 0
    assert on_destroy.call_count == 1
Example #7
0
  def test_it_finds_single_service_and_port(self):
    url = run_tiltfile_func("helpers/Tiltfile", "get_service_url", 
      yaml=f"""
{gen_service("dave")}
"""
    )

    assert url == "dave.test:1234"
Example #8
0
def test_makes_post_install_or_upgrade_hook_workloads_dependent_on_other_workloads(
):
    k8s_resource = Mock()
    run_tiltfile_func("helm_hooks/Tiltfile",
                      "helm_install_handle_hooks",
                      mocks={'k8s_resource': k8s_resource},
                      yaml="""
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dave
  namespace: test
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dave3
  namespace: test
  annotations:
    helm.sh/hook: pre-install
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dave4
  namespace: test
  annotations:
    helm.sh/hook: post-install
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dave5
  namespace: test
  annotations:
    helm.sh/hook: post-upgrade
""")

    assert k8s_resource.call_count == 3
    k8s_resource.assert_any_call(
        workload="dave4:deployment:test",
        resource_deps=["dave:deployment:test", "dave3:deployment:test"])
    k8s_resource.assert_any_call(
        workload="dave5:deployment:test",
        resource_deps=["dave:deployment:test", "dave3:deployment:test"])
Example #9
0
  def test_it_can_match_port_on_number(self):
    url = run_tiltfile_func("helpers/Tiltfile", "get_service_url", 
      port=1234,
      yaml=f"""
{gen_service("dave", [("port1", 1234), ("port2", 5678)])}
"""
    )

    assert url == "dave.test:1234"
    def test_it_uses_s3_bucket_name_if_present(self):
        local_resource = Mock()

        run_tiltfile_func("tilt_env/Tiltfile",
                          "tilt_env_set",
                          key="my_bucket",
                          val="bucket_id")

        run_tiltfile_func(
            "local_resource_ext/Tiltfile",
            "s3_bucket",
            mocks={'local_resource': local_resource},
            resource_name="my_bucket",
        )

        assert local_resource.call_count == 1
        assert local_resource.call_args[0][0] == "my_bucket"
        assert "bucket_id" in local_resource.call_args[0][1]
    def test_creates_bucket_on_first_run(self):
        bucket_name = run_tiltfile_func(
            "local_resource_ext/Tiltfile",
            "s3_bucket",
            mocks={'local_resource': local_resource_integration},
            resource_name="my_bucket",
        )

        s3.meta.client.head_bucket(Bucket=bucket_name)
Example #12
0
def test_doesnt_assign_deps_for_excluded_resources():
    k8s_resource = Mock()
    run_tiltfile_func("helm_hooks/Tiltfile",
                      "helm_install_handle_hooks",
                      mocks={'k8s_resource': k8s_resource},
                      yaml="""
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dave
  namespace: test
  annotations:
    helm.sh/hook: test-failure
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dave3
  namespace: test
  annotations:
    helm.sh/hook: pre-install
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dave4
  namespace: test
  annotations:
    helm.sh/hook: post-install
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dave5
  namespace: test
  annotations:
    helm.sh/hook: post-upgrade
""")

    assert k8s_resource.call_count == 2
    k8s_resource.assert_any_call(workload="dave4:deployment:test",
                                 resource_deps=["dave3:deployment:test"])
    k8s_resource.assert_any_call(workload="dave5:deployment:test",
                                 resource_deps=["dave3:deployment:test"])
    def test_creates_key_on_first_run(self):
        key_name = run_tiltfile_func(
            "local_resource_ext/Tiltfile",
            "credstash_key",
            mocks={'local_resource': local_resource_integration},
            resource_name="my_key",
            val="my_secret",
        )

        assert credstash.getSecret(key_name) == 'my_secret'
    def test_upserts_on_second_run(self):
        key_name = run_tiltfile_func(
            "local_resource_ext/Tiltfile",
            "credstash_key",
            mocks={'local_resource': local_resource_integration},
            resource_name="my_key",
            val="my_secret",
        )

        key_name2 = run_tiltfile_func(
            "local_resource_ext/Tiltfile",
            "credstash_key",
            mocks={'local_resource': local_resource_integration},
            resource_name="my_key",
            val="my_new_secret",
        )

        assert key_name == key_name2
        assert credstash.getSecret(key_name) == 'my_new_secret'
Example #15
0
  def test_it_can_match_service_on_name(self):
    url = run_tiltfile_func("helpers/Tiltfile", "get_service_url", 
      service_name="dave",
      yaml=f"""
{gen_service("dave")}
---
{gen_service("dave2")}
"""
    )

    assert url == "dave.test:1234"
    def test_it_uses_credstash_key_name_if_present(self):
        local_resource = Mock()

        run_tiltfile_func("tilt_env/Tiltfile",
                          "tilt_env_set",
                          key="my_key",
                          val="key_name")

        run_tiltfile_func(
            "local_resource_ext/Tiltfile",
            "credstash_key",
            mocks={'local_resource': local_resource},
            resource_name="my_key",
            val="my_secret",
        )

        assert local_resource.call_count == 1
        assert local_resource.call_args[0][0] == "my_key"
        assert "key_name" in local_resource.call_args[0][1]
        assert "my_secret" in local_resource.call_args[0][1]
    def test_it_creates_s3_bucket_name_if_not_present(self):
        local_resource = Mock()

        bucket_name = run_tiltfile_func(
            "local_resource_ext/Tiltfile",
            "s3_bucket",
            mocks={'local_resource': local_resource},
            resource_name="my_bucket",
        )

        assert local_resource.call_count == 1
        assert local_resource.call_args[0][0] == "my_bucket"
        assert bucket_name in local_resource.call_args[0][1]
Example #18
0
def test_excludes_test_and_rollback_hook_workloads():
    k8s_yaml = Mock()
    run_tiltfile_func("helm_hooks/Tiltfile",
                      "helm_install_handle_hooks",
                      mocks={'k8s_yaml': k8s_yaml},
                      yaml="""
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dave
  namespace: test
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dave2
  namespace: test
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dave3
  namespace: test
  annotations:
    helm.sh/hook: test-success
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dave4
  namespace: test
  annotations:
    helm.sh/hook: test-failure
""")

    saved_objs = yaml.safe_load_all(k8s_yaml.call_args.args[0])

    assert [obj["metadata"]["name"] for obj in saved_objs] == ["dave", "dave2"]
    def test_deletes_on_teardown(self):
        bucket_name = run_tiltfile_func(
            "local_resource_ext/Tiltfile",
            "s3_bucket",
            mocks={'local_resource': local_resource_integration},
            resource_name="my_bucket",
        )

        run_tiltfile_func(
            "local_resource_ext/Tiltfile",
            "s3_bucket",
            mocks={
                'local_resource': local_resource_integration,
                'config': TiltConfig('down')
            },
            resource_name="my_bucket",
        )

        with pytest.raises(ClientError):
            s3.meta.client.head_bucket(Bucket=bucket_name)
        assert run_tiltfile_func("tilt_env/Tiltfile",
                                 "tilt_env_get",
                                 key="my_bucket") == None
    def test_it_creates_credstash_key_name_if_not_present(self):
        local_resource = Mock()

        key_name = run_tiltfile_func(
            "local_resource_ext/Tiltfile",
            "credstash_key",
            mocks={'local_resource': local_resource},
            resource_name="my_key",
            val="my_secret",
        )

        assert local_resource.call_count == 1
        assert local_resource.call_args[0][0] == "my_key"
        assert key_name in local_resource.call_args[0][1]
        assert "my_secret" in local_resource.call_args[0][1]
def test_imports_should_not_pollute_global_scope():
    run_tiltfile_func("test/load/multi_import/Tiltfile", "test_func", arg=15)
    with pytest.raises(NameError):
        run_tiltfile_func("test/load/failure/Tiltfile", "test_func", arg=15)
def test_handles_local_file_imports():
    result = run_tiltfile_func("test/load/Tiltfile", "test_func", arg=15)
    assert result == 16
def test_handles_ext_package_imports():
    result = run_tiltfile_func("test/load/ext/Tiltfile", "test_func", str="hi")
    assert result == "hi"
Example #24
0
 def test_adds_prefix_to_random_value(self):
     val1 = run_tiltfile_func("tilt_env/Tiltfile",
                              "tilt_env_get_or_random",
                              key="test1",
                              val_prefix="dave")
     assert val1.startswith("dave") == True
def test_doesnt_pollute_scope_with_non_imported_functions():
    with pytest.raises(NameError):
        run_tiltfile_func("test/load/failure/Tiltfile", "test_func", arg=15)
def test_handles_multiple_function_imports():
    result = run_tiltfile_func("test/load/multi_import/Tiltfile",
                               "test_func",
                               arg=15)
    assert result == 15
def test_runs_basic_tiltfile():
    result = run_tiltfile_func("test/basic/Tiltfile", "simple", arg=10)
    assert result == 11