diff --git a/packages/tests/modular_integration_tests b/packages/tests/modular_integration_tests
index 3a7987f..db78459 100644
--- a/packages/tests/modular_integration_tests
+++ b/packages/tests/modular_integration_tests
@@ -20,10 +20,6 @@
         "//peridot/tests/last_focus_time:last_focus_time_test_session_shell",
         "//peridot/tests/link_context_entities:link_context_entities_test_module",
         "//peridot/tests/link_context_entities:link_context_entities_test_session_shell",
-        "//peridot/tests/link_data:link_data_test_module0",
-        "//peridot/tests/link_data:link_data_test_module1",
-        "//peridot/tests/link_data:link_data_test_module2",
-        "//peridot/tests/link_data:link_data_test_session_shell",
         "//peridot/tests:modular_tests",
         "//peridot/tests/module_context:module_context_test_session_shell",
         "//peridot/tests/module_context:module_context_test_module",
diff --git a/tests/intents/intent_test_child_module.cc b/tests/intents/intent_test_child_module.cc
index 2623e78..709bb83 100644
--- a/tests/intents/intent_test_child_module.cc
+++ b/tests/intents/intent_test_child_module.cc
@@ -58,12 +58,6 @@
           Signal(kChildModuleHandledIntent + parameter_data);
         }
       }
-      if (parameter.data.is_link_name()) {
-        // The parent module expects parameters which are either link_name or
-        // link_path to be transformed before they are handled here. This
-        // notifies the parent of which link name was received.
-        Signal(kChildModuleHandledIntent + *parameter.data.link_name());
-      }
     }
   }
 
diff --git a/tests/intents/intent_test_parent_module.cc b/tests/intents/intent_test_parent_module.cc
index 05a2acd..10e819a 100644
--- a/tests/intents/intent_test_parent_module.cc
+++ b/tests/intents/intent_test_parent_module.cc
@@ -114,64 +114,10 @@
         kIntentParameterNameAlternate, json, child_module_second_.NewRequest());
     Await(kChildModuleHandledIntent + json, [this] {
       third_intent_was_handled_.Pass();
-      TestStartIntentWithLinkNameAndPath();
+      Signal(modular::testing::kTestShutdown);
     });
   }
 
-  // Tests that a link_name parameter and a link_path parameter both get
-  // modified by the framework to point to the appropriate link name when given
-  // to the intent handler.
-  TestPoint fourth_intent_was_handled_{"Fourth intent was handled"};
-  void TestStartIntentWithLinkNameAndPath() {
-    fuchsia::modular::Intent intent;
-    intent.handler = kChildModuleUrl;
-    intent.action = kChildModuleAction;
-    // The framework populates the intent handler's link namespace and provides
-    // each parameter in a link with the parameter name.
-    std::string first_parameter_name = "first_param";
-    std::string second_parameter_name = "second_param";
-
-    fuchsia::modular::IntentParameter intent_parameter;
-    intent_parameter.name = first_parameter_name;
-    intent_parameter.data = fuchsia::modular::IntentParameterData();
-    // The link name here should not be seen by the intent handler, but rather
-    // the handler will be given the link name in its own namespace, in this
-    // case first_parameter_name.
-    intent_parameter.data.set_link_name("does_not_matter");
-
-    fuchsia::modular::IntentParameter intent_parameter2;
-    intent_parameter2.name = second_parameter_name;
-    intent_parameter2.data = fuchsia::modular::IntentParameterData();
-    fuchsia::modular::LinkPath path;
-    // The link_path here should not be seen by the intent handler, but rather
-    // the handler will be given the link name in its own namespace, in this
-    // case first_parameter_name.
-    path.link_name = "does_not_matter_either";
-    std::vector<std::string> module_path;
-    module_path.push_back("nor_does_this_matter");
-    path.module_path = std::move(module_path);
-    intent_parameter2.data.set_link_path(std::move(path));
-
-    intent.parameters.push_back(std::move(intent_parameter));
-    intent.parameters.push_back(std::move(intent_parameter2));
-
-    module_host_->module_context()->AddModuleToStory(
-        kChildModuleName, std::move(intent), child_module_second_.NewRequest(),
-        nullptr, [](const fuchsia::modular::StartModuleStatus) {});
-
-    // Verify that the link_name parameter was delivered as a link named the
-    // same as the parameter.
-    Await(kChildModuleHandledIntent + first_parameter_name,
-          [this, second_parameter_name] {
-            // Verify that the link_path parameter was delivered as a link named
-            // the same as the parameter.
-            Await(kChildModuleHandledIntent + second_parameter_name, [this] {
-              fourth_intent_was_handled_.Pass();
-              Signal(modular::testing::kTestShutdown);
-            });
-          });
-  }
-
   // Called by ModuleDriver.
   TestPoint stopped_{"Parent module stopped"};
   void Terminate(const std::function<void()>& done) {
diff --git a/tests/link_data/BUILD.gn b/tests/link_data/BUILD.gn
deleted file mode 100644
index 3dcb92d..0000000
--- a/tests/link_data/BUILD.gn
+++ /dev/null
@@ -1,131 +0,0 @@
-# Copyright 2017 The Fuchsia Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import("//peridot/build/executable_package.gni")
-
-source_set("defs") {
-  testonly = true
-
-  sources = [
-    "defs.h",
-  ]
-}
-
-executable_package("link_data_test_session_shell") {
-  deprecated_bare_package_url = "//build"
-
-  testonly = true
-
-  sources = [
-    "link_data_test_session_shell.cc",
-  ]
-
-  meta = [
-    {
-      path = "meta/link_data_test_session_shell.cmx"
-      dest = "link_data_test_session_shell.cmx"
-    },
-  ]
-
-
-  deps = [
-    ":defs",
-    "//garnet/public/fidl/fuchsia.testing.runner",
-    "//garnet/public/fidl/fuchsia.ui.viewsv1",
-    "//garnet/public/lib/fidl/cpp",
-    "//garnet/public/lib/fxl",
-    "//peridot/lib/common:names",
-    "//peridot/lib/rapidjson",
-    "//peridot/public/lib/integration_testing/cpp",
-    "//peridot/lib/testing:component_main",
-    "//peridot/lib/testing:session_shell_base",
-    "//peridot/public/fidl/fuchsia.modular",
-    "//peridot/public/fidl/fuchsia.modular.internal",
-    "//peridot/tests/common:defs",
-  ]
-}
-
-executable_package("link_data_test_module0") {
-  deprecated_bare_package_url = "//build"
-
-  testonly = true
-
-  sources = [
-    "link_data_test_module0.cc",
-  ]
-
-  meta = [
-    {
-      path = "meta/link_data_test_module0.cmx"
-      dest = "link_data_test_module0.cmx"
-    },
-  ]
-
-  deps = [
-    ":defs",
-    "//garnet/public/fidl/fuchsia.ui.viewsv1",
-    "//peridot/lib/rapidjson",
-    "//peridot/public/lib/integration_testing/cpp",
-    "//peridot/public/fidl/fuchsia.modular",
-    "//peridot/public/lib/app_driver/cpp:module_driver",
-    "//peridot/tests/common:defs",
-    "//zircon/public/lib/async-loop-cpp",
-  ]
-}
-
-executable_package("link_data_test_module1") {
-  deprecated_bare_package_url = "//build"
-
-  testonly = true
-
-  sources = [
-    "link_data_test_module1.cc",
-  ]
-
-  meta = [
-    {
-      path = "meta/link_data_test_module1.cmx"
-      dest = "link_data_test_module1.cmx"
-    },
-  ]
-
-  deps = [
-    ":defs",
-    "//garnet/public/fidl/fuchsia.ui.viewsv1",
-    "//peridot/lib/rapidjson",
-    "//peridot/public/lib/integration_testing/cpp",
-    "//peridot/public/fidl/fuchsia.modular",
-    "//peridot/public/lib/app_driver/cpp:module_driver",
-    "//peridot/tests/common:defs",
-    "//zircon/public/lib/async-loop-cpp",
-  ]
-}
-
-executable_package("link_data_test_module2") {
-  deprecated_bare_package_url = "//build"
-
-  testonly = true
-
-  sources = [
-    "link_data_test_module2.cc",
-  ]
-
-  meta = [
-    {
-      path = "meta/link_data_test_module2.cmx"
-      dest = "link_data_test_module2.cmx"
-    },
-  ]
-
-  deps = [
-    ":defs",
-    "//garnet/public/fidl/fuchsia.ui.viewsv1",
-    "//peridot/lib/rapidjson",
-    "//peridot/public/lib/integration_testing/cpp",
-    "//peridot/public/fidl/fuchsia.modular",
-    "//peridot/public/lib/app_driver/cpp:module_driver",
-    "//peridot/tests/common:defs",
-    "//zircon/public/lib/async-loop-cpp",
-  ]
-}
diff --git a/tests/link_data/README.md b/tests/link_data/README.md
deleted file mode 100644
index 51f75d3..0000000
--- a/tests/link_data/README.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# link_data integration test
-
-Tests the machinery that allows modules to coordinate through shared link data,
-and that these link data are persisted across story stop and resume.
-
-This test is invoked as a session shell from basemgr and executes a
-predefined sequence of steps, rather than to expose a UI to be driven by user
-interaction, as a session shell normally would.
-
-The session shell creates a story with Module0. Module0 in turn starts Module1 and
-Module2 and sets them up such that they can exchage data. Module1 and Module2
-alternate in incrementing a counter.
-
-The aspects examined by this test sequence are:
-
-1. Creating a story with initial data for the fist module.
-2. Verifying that the initial data are actually in the fuchsia::modular::Link presented to the
-   first module.
-3. Verifying that the initial data can be changed through the fuchsia::modular::Link interface.
-4. Observe the running module changing its own links.
-5. Stopping the story.
-6. Using the fuchsia::modular::StoryProvider API to verify that it shows no running stories.
-7. Starting the story again.
-8. Observing the running module resume modification of its own links at the
-   point it left off.
diff --git a/tests/link_data/defs.h b/tests/link_data/defs.h
deleted file mode 100644
index 0aeadd2..0000000
--- a/tests/link_data/defs.h
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2018 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef PERIDOT_TESTS_LINK_DATA_DEFS_H_
-#define PERIDOT_TESTS_LINK_DATA_DEFS_H_
-
-namespace {
-
-// Package URLs and actions of the test components used here.
-constexpr char kModule0Url[] =
-    "fuchsia-pkg://fuchsia.com/link_data_test_module0#meta/link_data_test_module0.cmx";
-constexpr char kModule0Action[] = "action";
-constexpr char kModule0Name[] = "module0";
-
-constexpr char kModule1Url[] =
-    "fuchsia-pkg://fuchsia.com/link_data_test_module1#meta/link_data_test_module1.cmx";
-constexpr char kModule1Action[] = "action";
-constexpr char kModule1Name[] = "module1";
-
-constexpr char kModule2Url[] =
-    "fuchsia-pkg://fuchsia.com/link_data_test_module2#meta/link_data_test_module2.cmx";
-constexpr char kModule2Action[] = "action";
-constexpr char kModule2Name[] = "module2";
-
-// Names for links of Module0.
-constexpr char kModule0Link[] = "module0";
-constexpr char kModule1Link[] = "module1";
-constexpr char kModule2Link[] = "module2";
-
-// Names for properties inside link values.
-constexpr char kCount[] = "count";
-
-// Used as link values.
-constexpr char kRootJson0[] = "\"123450\"";
-constexpr char kRootJson1[] = "\"123451\"";
-
-}  // namespace
-
-#endif  // PERIDOT_TESTS_LINK_DATA_DEFS_H_
diff --git a/tests/link_data/link_data_test_module0.cc b/tests/link_data/link_data_test_module0.cc
deleted file mode 100644
index b3b50eb..0000000
--- a/tests/link_data/link_data_test_module0.cc
+++ /dev/null
@@ -1,154 +0,0 @@
-// Copyright 2016 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// A Module that serves as the recipe in the example story, i.e. that
-// creates other Modules in the story.
-
-#include <fuchsia/modular/cpp/fidl.h>
-#include <fuchsia/ui/viewsv1/cpp/fidl.h>
-#include <lib/app_driver/cpp/module_driver.h>
-#include <lib/async-loop/cpp/loop.h>
-#include <lib/fsl/vmo/strings.h>
-
-#include "peridot/lib/rapidjson/rapidjson.h"
-#include "peridot/public/lib/integration_testing/cpp/reporting.h"
-#include "peridot/public/lib/integration_testing/cpp/testing.h"
-#include "peridot/tests/common/defs.h"
-#include "peridot/tests/link_data/defs.h"
-
-using modular::testing::Signal;
-
-namespace {
-
-// Implementation of the fuchsia::modular::LinkWatcher service that forwards the
-// value of one fuchsia::modular::Link instance to a second
-// fuchsia::modular::Link instance whenever it changes.
-class LinkForwarder : fuchsia::modular::LinkWatcher {
- public:
-  LinkForwarder(fuchsia::modular::Link* const src,
-                fuchsia::modular::Link* const dst)
-      : src_binding_(this), src_(src), dst_(dst) {
-    src_->Watch(src_binding_.NewBinding());
-  }
-
-  // |fuchsia::modular::LinkWatcher|
-  void Notify(fuchsia::mem::Buffer json) override {
-    dst_->Set(nullptr, std::move(json));
-  }
-
- private:
-  fidl::Binding<fuchsia::modular::LinkWatcher> src_binding_;
-  fuchsia::modular::Link* const src_;
-  fuchsia::modular::Link* const dst_;
-
-  FXL_DISALLOW_COPY_AND_ASSIGN(LinkForwarder);
-};
-
-// Cf. README.md for what this test does and how.
-class TestModule {
- public:
-  TestModule(modular::ModuleHost* const module_host,
-             fidl::InterfaceRequest<
-                 fuchsia::ui::app::ViewProvider> /*view_provider_request*/)
-      : module_host_(module_host),
-        module_context_(module_host_->module_context()) {
-    modular::testing::Init(module_host->startup_context(), __FILE__);
-    Signal("module0_init");
-
-    Start();
-  }
-
-  TestModule(modular::ModuleHost* const module_host,
-             fidl::InterfaceRequest<
-                 fuchsia::ui::viewsv1::ViewProvider> /*view_provider_request*/)
-      : TestModule(
-            module_host,
-            fidl::InterfaceRequest<fuchsia::ui::app::ViewProvider>(nullptr)) {}
-
-  void Start() {
-    // Read kModule0Link link data, and send its value back to the test user
-    // shell to verify its expected value. Nb. the session shell does this only
-    // for the first invocation. Therefore, it would be wrong to verify this
-    // with a TestPoint.
-    module_context_->GetLink(kModule0Link, link_.NewRequest());
-    link_->Get(nullptr, [this](std::unique_ptr<fuchsia::mem::Buffer> content) {
-      std::string content_string;
-      FXL_CHECK(fsl::StringFromVmo(*content, &content_string));
-      Signal(std::string("module0_link") + ":" + content_string);
-
-      StartModules();
-    });
-  }
-
-  void StartModules() {
-    module_context_->GetLink(kModule1Link, module1_link_.NewRequest());
-    module_context_->GetLink(kModule2Link, module2_link_.NewRequest());
-
-    fuchsia::modular::IntentParameterData parameter_data;
-    parameter_data.set_link_name(kModule1Link);
-    fuchsia::modular::IntentParameter parameter;
-    parameter.name = kModule1Link;
-    parameter.data = std::move(parameter_data);
-
-    fuchsia::modular::Intent intent;
-    intent.handler = kModule1Url;
-    intent.action = kModule1Action;
-    intent.parameters.push_back(std::move(parameter));
-
-    module_context_->AddModuleToStory(
-        kModule1Name, std::move(intent), module1_.NewRequest(), nullptr,
-        [](fuchsia::modular::StartModuleStatus) {});
-
-    parameter_data = fuchsia::modular::IntentParameterData();
-    parameter_data.set_link_name(kModule2Link);
-    parameter = fuchsia::modular::IntentParameter();
-    parameter.name = kModule2Link;
-    parameter.data = std::move(parameter_data);
-
-    intent = fuchsia::modular::Intent();
-    intent.handler = kModule2Url;
-    intent.action = kModule2Action;
-    intent.parameters.push_back(std::move(parameter));
-
-    module_context_->AddModuleToStory(
-        kModule2Name, std::move(intent), module2_.NewRequest(), nullptr,
-        [](fuchsia::modular::StartModuleStatus) {});
-
-    connections_.emplace_back(
-        new LinkForwarder(module1_link_.get(), module2_link_.get()));
-  }
-
-  // Called from ModuleDriver.
-  void Terminate(const std::function<void()>& done) {
-    Signal("module1_stop");
-    modular::testing::Done(done);
-  }
-
- private:
-  modular::ModuleHost* const module_host_;
-  fuchsia::modular::ModuleContext* const module_context_;
-
-  fuchsia::modular::LinkPtr link_;
-
-  fuchsia::modular::ModuleControllerPtr module1_;
-  fuchsia::modular::LinkPtr module1_link_;
-
-  fuchsia::modular::ModuleControllerPtr module2_;
-  fuchsia::modular::LinkPtr module2_link_;
-
-  std::vector<std::unique_ptr<LinkForwarder>> connections_;
-
-  FXL_DISALLOW_COPY_AND_ASSIGN(TestModule);
-};
-
-}  // namespace
-
-int main(int /*argc*/, const char** /*argv*/) {
-  async::Loop loop(&kAsyncLoopConfigAttachToThread);
-  auto context = component::StartupContext::CreateFromStartupInfo();
-  modular::ModuleDriver<TestModule> driver(context.get(),
-                                           [&loop] { loop.Quit(); });
-  loop.Run();
-  return 0;
-}
diff --git a/tests/link_data/link_data_test_module1.cc b/tests/link_data/link_data_test_module1.cc
deleted file mode 100644
index e75362c..0000000
--- a/tests/link_data/link_data_test_module1.cc
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright 2018 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <fuchsia/modular/cpp/fidl.h>
-#include <fuchsia/ui/viewsv1/cpp/fidl.h>
-#include <lib/app_driver/cpp/module_driver.h>
-#include <lib/async-loop/cpp/loop.h>
-#include <lib/fsl/vmo/strings.h>
-
-#include "peridot/lib/rapidjson/rapidjson.h"
-#include "peridot/public/lib/integration_testing/cpp/reporting.h"
-#include "peridot/public/lib/integration_testing/cpp/testing.h"
-#include "peridot/tests/common/defs.h"
-#include "peridot/tests/link_data/defs.h"
-
-using modular::testing::Put;
-using modular::testing::Signal;
-
-namespace {
-
-// Cf. README.md for what this test does and how.
-class TestModule {
- public:
-  TestModule(modular::ModuleHost* const module_host,
-             fidl::InterfaceRequest<
-                 fuchsia::ui::app::ViewProvider> /*view_provider_request*/)
-      : module_host_(module_host) {
-    modular::testing::Init(module_host->startup_context(), __FILE__);
-    Signal("module1_init");
-
-    path_.push_back(kCount);
-
-    Start();
-  }
-
-  TestModule(modular::ModuleHost* const module_host,
-             fidl::InterfaceRequest<
-                 fuchsia::ui::viewsv1::ViewProvider> /*view_provider_request*/)
-      : TestModule(
-            module_host,
-            fidl::InterfaceRequest<fuchsia::ui::app::ViewProvider>(nullptr)) {}
-
-  void Start() {
-    module_host_->module_context()->GetLink(kModule1Link, link_.NewRequest());
-    Loop();
-  }
-
-  void Loop() {
-    link_->Get(
-        path_.Clone(), [this](std::unique_ptr<fuchsia::mem::Buffer> content) {
-          std::string content_string;
-          if (content) {
-            FXL_CHECK(fsl::StringFromVmo(*content, &content_string));
-          }
-
-          rapidjson::Document doc;
-          doc.Parse(content_string);
-          if (doc.IsInt()) {
-            doc.SetInt(doc.GetInt() + 1);
-          } else {
-            doc.SetInt(0);
-          }
-          fsl::SizedVmo vmo;
-          FXL_CHECK(fsl::VmoFromString(modular::JsonValueToString(doc), &vmo));
-          link_->Set(path_.Clone(), std::move(vmo).ToTransport());
-          link_->Sync([this] { Loop(); });
-        });
-  }
-
-  // Called from ModuleDriver.
-  void Terminate(const std::function<void()>& done) {
-    modular::testing::GetStore()->Put("module1_stop", "", [] {});
-    modular::testing::Done(done);
-  }
-
- private:
-  modular::ModuleHost* const module_host_;
-  fuchsia::modular::LinkPtr link_;
-
-  fidl::VectorPtr<std::string> path_;
-
-  FXL_DISALLOW_COPY_AND_ASSIGN(TestModule);
-};
-
-}  // namespace
-
-int main(int /*argc*/, const char** /*argv*/) {
-  async::Loop loop(&kAsyncLoopConfigAttachToThread);
-  auto context = component::StartupContext::CreateFromStartupInfo();
-  modular::ModuleDriver<TestModule> driver(context.get(),
-                                           [&loop] { loop.Quit(); });
-  loop.Run();
-  return 0;
-}
diff --git a/tests/link_data/link_data_test_module2.cc b/tests/link_data/link_data_test_module2.cc
deleted file mode 100644
index a9f303e..0000000
--- a/tests/link_data/link_data_test_module2.cc
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright 2018 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <fuchsia/modular/cpp/fidl.h>
-#include <fuchsia/ui/viewsv1/cpp/fidl.h>
-#include <lib/app_driver/cpp/module_driver.h>
-#include <lib/async-loop/cpp/loop.h>
-#include <lib/fsl/vmo/strings.h>
-
-#include "peridot/lib/rapidjson/rapidjson.h"
-#include "peridot/public/lib/integration_testing/cpp/reporting.h"
-#include "peridot/public/lib/integration_testing/cpp/testing.h"
-#include "peridot/tests/link_data/defs.h"
-
-namespace {
-
-// Cf. README.md for what this test does and how.
-class TestModule : fuchsia::modular::LinkWatcher {
- public:
-  TestModule(modular::ModuleHost* const module_host,
-             fidl::InterfaceRequest<
-                 fuchsia::ui::app::ViewProvider> /*view_provider_request*/)
-      : module_host_(module_host), link_watcher_binding_(this) {
-    modular::testing::Init(module_host->startup_context(), __FILE__);
-    modular::testing::GetStore()->Put("module2_init", "", [] {});
-    Start();
-  }
-
-  TestModule(modular::ModuleHost* const module_host,
-             fidl::InterfaceRequest<
-                 fuchsia::ui::viewsv1::ViewProvider> /*view_provider_request*/)
-      : TestModule(
-            module_host,
-            fidl::InterfaceRequest<fuchsia::ui::app::ViewProvider>(nullptr)) {}
-
-  void Start() {
-    module_host_->module_context()->GetLink(kModule2Link, link_.NewRequest());
-    link_->WatchAll(link_watcher_binding_.NewBinding());
-  }
-
-  // Called from ModuleDriver.
-  void Terminate(const std::function<void()>& done) {
-    modular::testing::GetStore()->Put("module2_stop", "", [] {});
-    modular::testing::Done(done);
-  }
-
- private:
-  // |fuchsia::modular::LinkWatcher|
-  void Notify(fuchsia::mem::Buffer value) override {
-    std::string json;
-    FXL_CHECK(fsl::StringFromVmo(value, &json));
-    modular::testing::GetStore()->Put("module2_link", json, [] {});
-  }
-
-  modular::ModuleHost* const module_host_;
-  fuchsia::modular::LinkPtr link_;
-  fidl::Binding<fuchsia::modular::LinkWatcher> link_watcher_binding_;
-
-  FXL_DISALLOW_COPY_AND_ASSIGN(TestModule);
-};
-
-}  // namespace
-
-int main(int /*argc*/, const char** /*argv*/) {
-  async::Loop loop(&kAsyncLoopConfigAttachToThread);
-  auto context = component::StartupContext::CreateFromStartupInfo();
-  modular::ModuleDriver<TestModule> driver(context.get(),
-                                           [&loop] { loop.Quit(); });
-  loop.Run();
-  return 0;
-}
diff --git a/tests/link_data/link_data_test_session_shell.cc b/tests/link_data/link_data_test_session_shell.cc
deleted file mode 100644
index addf960..0000000
--- a/tests/link_data/link_data_test_session_shell.cc
+++ /dev/null
@@ -1,263 +0,0 @@
-// Copyright 2017 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <memory>
-#include <utility>
-
-#include <fuchsia/modular/internal/cpp/fidl.h>
-#include <fuchsia/ui/viewsv1token/cpp/fidl.h>
-#include <lib/async/cpp/task.h>
-#include <lib/async/default.h>
-#include <lib/component/cpp/startup_context.h>
-#include <lib/fidl/cpp/binding.h>
-#include <lib/fsl/vmo/strings.h>
-#include <lib/fxl/command_line.h>
-#include <lib/fxl/logging.h>
-#include <lib/fxl/macros.h>
-
-#include "peridot/lib/common/names.h"
-#include "peridot/lib/rapidjson/rapidjson.h"
-#include "peridot/lib/testing/component_main.h"
-#include "peridot/lib/testing/session_shell_base.h"
-#include "peridot/public/lib/integration_testing/cpp/reporting.h"
-#include "peridot/public/lib/integration_testing/cpp/testing.h"
-#include "peridot/tests/common/defs.h"
-#include "peridot/tests/link_data/defs.h"
-
-using modular::testing::Await;
-using modular::testing::Get;
-using modular::testing::Signal;
-using modular::testing::TestPoint;
-
-namespace {
-
-const char kStoryName[] = "story";
-
-// Cf. README.md for what this test does and how.
-class TestApp : public modular::testing::SessionShellBase {
- public:
-  explicit TestApp(component::StartupContext* const startup_context)
-      : SessionShellBase(startup_context) {
-    TestInit(__FILE__);
-
-    startup_context->ConnectToEnvironmentService(puppet_master_.NewRequest());
-
-    TestStory1();
-  }
-
-  ~TestApp() override = default;
-
- private:
-  TestPoint story1_create_{"Story1 Create"};
-
-  void TestStory1() {
-    std::vector<fuchsia::modular::StoryCommand> commands;
-    fuchsia::modular::AddMod add_mod;
-    add_mod.mod_name.push_back(kModule0Name);
-    add_mod.intent.action = kModule0Action;
-    add_mod.intent.handler = kModule0Url;
-
-    fuchsia::modular::IntentParameterData data;
-    fsl::SizedVmo vmo;
-    FXL_CHECK(fsl::VmoFromString(kRootJson0, &vmo));
-    data.set_json(std::move(vmo).ToTransport());
-    fuchsia::modular::IntentParameter intent_parameter;
-    intent_parameter.name = kModule0Link;
-    intent_parameter.data = std::move(data);
-    add_mod.intent.parameters.push_back(std::move(intent_parameter));
-
-    fuchsia::modular::StoryCommand command;
-    command.set_add_mod(std::move(add_mod));
-    commands.push_back(std::move(command));
-
-    puppet_master_->ControlStory(kStoryName, story_puppet_master_.NewRequest());
-    story_puppet_master_->Enqueue(std::move(commands));
-    story_puppet_master_->Execute(
-        [this](fuchsia::modular::ExecuteResult result) {
-          story1_create_.Pass();
-          TestStory1_GetController();
-        });
-  }
-
-  TestPoint story1_get_controller_{"Story1 GetController"};
-
-  void TestStory1_GetController() {
-    story_provider()->GetController(kStoryName, story_controller_.NewRequest());
-    story_controller_->GetInfo([this](fuchsia::modular::StoryInfo story_info,
-                                      fuchsia::modular::StoryState state) {
-      story1_get_controller_.Pass();
-      story_info_ = std::move(story_info);
-      TestStory1_GetModule0Link();
-    });
-  }
-
-  TestPoint story1_get_module0_link_{"Story1 Get Module0 link"};
-
-  void TestStory1_GetModule0Link() {
-    fidl::VectorPtr<std::string> module_path;
-    module_path.push_back(kModule0Name);
-    fuchsia::modular::LinkPath link_path = fuchsia::modular::LinkPath();
-    link_path.module_path = std::move(module_path);
-    link_path.link_name = kModule0Link;
-    story_controller_->GetLink(std::move(link_path),
-                               module0_link_.NewRequest());
-    module0_link_->Get(nullptr,
-                       [this](std::unique_ptr<fuchsia::mem::Buffer> value) {
-                         std::string json_string;
-                         FXL_CHECK(fsl::StringFromVmo(*value, &json_string));
-                         if (json_string == kRootJson0) {
-                           story1_get_module0_link_.Pass();
-                         } else {
-                           FXL_LOG(ERROR) << "GOT LINK " << json_string
-                                          << " EXPECTED " << kRootJson0;
-                         }
-                         TestStory1_SetModule0Link();
-                       });
-  }
-
-  TestPoint story1_set_module0_link_{"Story1 Set Module0 link"};
-
-  void TestStory1_SetModule0Link() {
-    fsl::SizedVmo data;
-    auto result = fsl::VmoFromString(kRootJson1, &data);
-    FXL_CHECK(result);
-
-    module0_link_->Set(nullptr, std::move(data).ToTransport());
-    module0_link_->Get(nullptr,
-                       [this](std::unique_ptr<fuchsia::mem::Buffer> value) {
-                         std::string json_string;
-                         FXL_CHECK(fsl::StringFromVmo(*value, &json_string));
-                         if (json_string == kRootJson1) {
-                           story1_set_module0_link_.Pass();
-                         } else {
-                           FXL_LOG(ERROR) << "GOT LINK " << json_string
-                                          << " EXPECTED " << kRootJson1;
-                         }
-                         TestStory1_Run();
-                       });
-  }
-
-  TestPoint story1_run_module0_link_{"Story1 Run: Module0 link"};
-
-  void TestStory1_Run() {
-    story_controller_->RequestStart();
-
-    Await(std::string("module0_link") + ":" + kRootJson1, [this] {
-      story1_run_module0_link_.Pass();
-      TestStory1_Wait();
-    });
-  }
-
-  void TestStory1_Wait() {
-    Get("module2_link", [this](fidl::StringPtr value) {
-      FXL_LOG(INFO) << "GET module2_link " << value;
-      rapidjson::Document doc;
-      doc.Parse(value);
-      if (!doc.IsObject() || !doc.HasMember(kCount) || !doc[kCount].IsInt() ||
-          doc[kCount].GetInt() < 10) {
-        TestStory1_Wait();
-        return;
-      }
-
-      TestStory1_Stop();
-    });
-  }
-
-  TestPoint story1_stop_{"Story1 Stop"};
-
-  void TestStory1_Stop() {
-    story_controller_->Stop([this] {
-      story1_stop_.Pass();
-      TestStory1_GetActiveModules();
-    });
-  }
-
-  TestPoint story1_get_active_modules_{"Story1 GetActiveModules()"};
-
-  void TestStory1_GetActiveModules() {
-    story_controller_->GetActiveModules(
-        [this](std::vector<fuchsia::modular::ModuleData> modules) {
-          if (modules.size() == 0) {
-            story1_get_active_modules_.Pass();
-          } else {
-            FXL_LOG(ERROR) << "ACTIVE MODULES " << modules.size()
-                           << " EXPECTED " << 0;
-          }
-          TestStory1_GetActiveLinks();
-        });
-  }
-
-  TestPoint story1_get_active_links_{"Story1 GetActiveLinks()"};
-
-  void TestStory1_GetActiveLinks() {
-    story_controller_->GetActiveLinks(
-        nullptr, [this](std::vector<fuchsia::modular::LinkPath> links) {
-          if (links.size() == 0) {
-            story1_get_active_links_.Pass();
-          } else {
-            FXL_LOG(ERROR) << "ACTIVE LINKS " << links.size() << " EXPECTED "
-                           << 0;
-          }
-          TestStory2_Run();
-        });
-  }
-
-  TestPoint story2_run_{"Story2 Run"};
-
-  void TestStory2_Run() {
-    story2_run_.Pass();
-
-    story_controller_->RequestStart();
-
-    TestStory2_Wait();
-  }
-
-  void TestStory2_Wait() {
-    Get("module2_link", [this](fidl::StringPtr value) {
-      FXL_LOG(INFO) << "GET module2_link " << value;
-      rapidjson::Document doc;
-      doc.Parse(value);
-      if (!doc.IsObject() || !doc.HasMember(kCount) || !doc[kCount].IsInt() ||
-          doc[kCount].GetInt() < 20) {
-        TestStory2_Wait();
-        return;
-      }
-
-      TestStory2_Stop();
-    });
-  }
-
-  TestPoint story2_stop_{"Story2 Stop"};
-
-  void TestStory2_Stop() {
-    story_controller_->Stop([this] {
-      story2_stop_.Pass();
-      TestStory2_Delete();
-    });
-  }
-
-  TestPoint story2_delete_{"Story2 Delete"};
-
-  void TestStory2_Delete() {
-    puppet_master_->DeleteStory(story_info_.id, [this] {
-      story2_delete_.Pass();
-      Signal(modular::testing::kTestShutdown);
-    });
-  }
-
-  fuchsia::modular::PuppetMasterPtr puppet_master_;
-  fuchsia::modular::StoryPuppetMasterPtr story_puppet_master_;
-  fuchsia::modular::StoryControllerPtr story_controller_;
-  fuchsia::modular::LinkPtr module0_link_;
-  fuchsia::modular::StoryInfo story_info_;
-
-  FXL_DISALLOW_COPY_AND_ASSIGN(TestApp);
-};
-
-}  // namespace
-
-int main(int argc, const char** argv) {
-  modular::testing::ComponentMain<TestApp>();
-  return 0;
-}
diff --git a/tests/link_data/meta/link_data_test_module0.cmx b/tests/link_data/meta/link_data_test_module0.cmx
deleted file mode 100644
index b34ea48..0000000
--- a/tests/link_data/meta/link_data_test_module0.cmx
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-    "program": {
-        "binary": "bin/app"
-    },
-    "sandbox": {
-        "services": [
-            "fuchsia.cobalt.LoggerFactory",
-            "fuchsia.modular.ModuleContext",
-            "fuchsia.modular.PuppetMaster",
-            "fuchsia.modular.SessionShellContext",
-            "fuchsia.net.LegacySocketProvider",
-            "fuchsia.sys.Environment",
-            "fuchsia.sys.Launcher",
-            "fuchsia.sys.Loader",
-            "fuchsia.testing.runner.TestRunner",
-            "fuchsia.testing.runner.TestRunnerStore",
-            "fuchsia.tracelink.Registry",
-            "fuchsia.ui.policy.Presenter",
-            "fuchsia.ui.scenic.Scenic",
-            "fuchsia.ui.viewsv1.ViewManager",
-            "fuchsia.ui.viewsv1.ViewSnapshot"
-        ]
-    }
-}
diff --git a/tests/link_data/meta/link_data_test_module1.cmx b/tests/link_data/meta/link_data_test_module1.cmx
deleted file mode 100644
index f303ccd..0000000
--- a/tests/link_data/meta/link_data_test_module1.cmx
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-    "program": {
-        "binary": "bin/app"
-    },
-    "sandbox": {
-        "services": [
-            "fuchsia.cobalt.LoggerFactory",
-            "fuchsia.modular.BasemgrMonitor",
-            "fuchsia.modular.ModuleContext",
-            "fuchsia.modular.PuppetMaster",
-            "fuchsia.modular.SessionShellContext",
-            "fuchsia.net.LegacySocketProvider",
-            "fuchsia.sys.Environment",
-            "fuchsia.sys.Launcher",
-            "fuchsia.sys.Loader",
-            "fuchsia.testing.runner.TestRunner",
-            "fuchsia.testing.runner.TestRunnerStore",
-            "fuchsia.tracelink.Registry",
-            "fuchsia.ui.policy.Presenter",
-            "fuchsia.ui.scenic.Scenic",
-            "fuchsia.ui.viewsv1.ViewManager",
-            "fuchsia.ui.viewsv1.ViewSnapshot"
-        ]
-    }
-}
diff --git a/tests/link_data/meta/link_data_test_module2.cmx b/tests/link_data/meta/link_data_test_module2.cmx
deleted file mode 100644
index f303ccd..0000000
--- a/tests/link_data/meta/link_data_test_module2.cmx
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-    "program": {
-        "binary": "bin/app"
-    },
-    "sandbox": {
-        "services": [
-            "fuchsia.cobalt.LoggerFactory",
-            "fuchsia.modular.BasemgrMonitor",
-            "fuchsia.modular.ModuleContext",
-            "fuchsia.modular.PuppetMaster",
-            "fuchsia.modular.SessionShellContext",
-            "fuchsia.net.LegacySocketProvider",
-            "fuchsia.sys.Environment",
-            "fuchsia.sys.Launcher",
-            "fuchsia.sys.Loader",
-            "fuchsia.testing.runner.TestRunner",
-            "fuchsia.testing.runner.TestRunnerStore",
-            "fuchsia.tracelink.Registry",
-            "fuchsia.ui.policy.Presenter",
-            "fuchsia.ui.scenic.Scenic",
-            "fuchsia.ui.viewsv1.ViewManager",
-            "fuchsia.ui.viewsv1.ViewSnapshot"
-        ]
-    }
-}
diff --git a/tests/link_data/meta/link_data_test_session_shell.cmx b/tests/link_data/meta/link_data_test_session_shell.cmx
deleted file mode 100644
index f303ccd..0000000
--- a/tests/link_data/meta/link_data_test_session_shell.cmx
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-    "program": {
-        "binary": "bin/app"
-    },
-    "sandbox": {
-        "services": [
-            "fuchsia.cobalt.LoggerFactory",
-            "fuchsia.modular.BasemgrMonitor",
-            "fuchsia.modular.ModuleContext",
-            "fuchsia.modular.PuppetMaster",
-            "fuchsia.modular.SessionShellContext",
-            "fuchsia.net.LegacySocketProvider",
-            "fuchsia.sys.Environment",
-            "fuchsia.sys.Launcher",
-            "fuchsia.sys.Loader",
-            "fuchsia.testing.runner.TestRunner",
-            "fuchsia.testing.runner.TestRunnerStore",
-            "fuchsia.tracelink.Registry",
-            "fuchsia.ui.policy.Presenter",
-            "fuchsia.ui.scenic.Scenic",
-            "fuchsia.ui.viewsv1.ViewManager",
-            "fuchsia.ui.viewsv1.ViewSnapshot"
-        ]
-    }
-}
diff --git a/tests/modular_tests.json b/tests/modular_tests.json
index ce6d657..3700677 100644
--- a/tests/modular_tests.json
+++ b/tests/modular_tests.json
@@ -67,19 +67,6 @@
       ]
     },
     {
-      "name": "link_data",
-      "exec": [
-        "fuchsia-pkg://fuchsia.com/basemgr#meta/basemgr.cmx",
-        "--test",
-        "--account_provider=fuchsia-pkg://fuchsia.com/dev_token_manager#meta/dev_token_manager.cmx",
-        "--base_shell=fuchsia-pkg://fuchsia.com/dev_base_shell#meta/dev_base_shell.cmx",
-        "--session_shell=fuchsia-pkg://fuchsia.com/link_data_test_session_shell#meta/link_data_test_session_shell.cmx",
-        "--session_shell_args=--use_memfs_for_ledger",
-        "--story_shell=fuchsia-pkg://fuchsia.com/dev_story_shell#meta/dev_story_shell.cmx",
-        "--sessionmgr_args=--use_memfs_for_ledger"
-      ]
-    },
-    {
       "name": "parent_child",
       "exec": [
         "fuchsia-pkg://fuchsia.com/basemgr#meta/basemgr.cmx",
